Mam ciąg, który wygląda jak '%s in %s'
i chcę wiedzieć, jak oddzielić argumenty, aby były dwoma różnymi% s. Mój umysł pochodzący z Javy wymyślił to:
'%s in %s' % unicode(self.author), unicode(self.publication)
Ale to nie działa, więc jak to wygląda w Pythonie?
'{} in {}'
ciągu formatu.Jeśli używasz więcej niż jednego argumentu, musi on znajdować się w krotce (zwróć uwagę na dodatkowe nawiasy):
Jak wskazuje EOL,
unicode()
funkcja zwykle przyjmuje domyślnie kodowanie ascii, więc jeśli masz znaki inne niż ASCII, bezpieczniej jest jawnie przekazać kodowanie:Od wersji Python 3.0 lepiej jest używać
str.format()
składni:źródło
W obiekcie krotki / mapowania dla wielu argumentów
format
Poniżej znajduje się wyciąg z dokumentacji:
Bibliografia
On
str.format
zamiast%
Nowszą alternatywą dla
%
operatora jest użyciestr.format
. Oto fragment dokumentacji:Bibliografia
str.format
- składniaPrzykłady
Oto kilka przykładów użycia:
Zobacz też
źródło
'{self.author} in {self.publication}'.format(self=self)
powinno „działać”. Po prostu nie jestem pewien co do całościunicode
.{first[0]}
do uzyskania inicjałuJ
.Musisz po prostu umieścić wartości w nawiasach:
Tutaj po raz pierwszy zostaną umieszczone. Po drugie , zostanie użyty.
%s
unicode(self.author)
%s
unicode(self.publication)
źródło
%s
raczej sugerująformat
Z niektórymi dotychczas opublikowanymi odpowiedziami jest poważny problem:
unicode()
dekoduje z domyślnego kodowania, którym często jest ASCII; w rzeczywistościunicode()
próbuje nadać sens bajtom, które otrzymuje, konwertując je na znaki. W związku z tym następujący kod, który zasadniczo jest zalecany we wcześniejszych odpowiedziach, nie działa na moim komputerze:daje:
Niepowodzenie wynika z faktu, że
author
nie zawiera tylko bajtów ASCII (tj. Z wartościami w [0; 127]) iunicode()
domyślnie dekoduje z ASCII (na wielu komputerach).Solidnym rozwiązaniem jest jawne podanie kodowania używanego w twoich polach; biorąc jako przykład UTF-8:
(lub bez inicjału
u
, w zależności od tego, czy chcesz uzyskać wynik Unicode, czy ciąg bajtów).W tym momencie można rozważyć,
author
czypublication
pola i są ciągami znaków Unicode, zamiast dekodować je podczas formatowania.źródło
W przypadku python2 możesz to również zrobić
co jest przydatne, jeśli masz wiele argumentów do zastąpienia (szczególnie jeśli zajmujesz się internacjonalizacją)
Python2.6 i nowsze obsługują
.format()
źródło
Możesz również użyć go w sposób czysty i prosty (ale źle! Ponieważ powinieneś używać go
format
tak, jak powiedział Mark Byers), wykonując:źródło
Dla kompletności, w Pythonie 3.6 f-string zostały wprowadzone w PEP-498 . Te struny umożliwiają
Oznaczałoby to, że na przykład możesz również użyć:
źródło