Ich habe eine Zeichenfolge, die aussieht, '%s in %s'
und ich möchte wissen, wie die Argumente so getrennt werden, dass sie zwei verschiedene% s sind. Meine Gedanken aus Java kamen auf folgendes:
'%s in %s' % unicode(self.author), unicode(self.publication)
Aber das funktioniert nicht. Wie sieht es in Python aus?
'{} in {}'
Formatzeichenfolge verwenden.Wenn Sie mehr als ein Argument verwenden, muss es in einem Tupel stehen (beachten Sie die zusätzlichen Klammern):
Wie EOL hervorhebt, geht die
unicode()
Funktion normalerweise von einer ASCII-Codierung als Standard aus. Wenn Sie also Nicht-ASCII-Zeichen haben, ist es sicherer, die Codierung explizit zu übergeben:Ab Python 3.0 wird
str.format()
stattdessen lieber die Syntax verwendet:quelle
Auf einem Tupel / Mapping-Objekt für mehrere Argumente
format
Folgendes ist ein Auszug aus der Dokumentation:
Verweise
Ein
str.format
statt%
Eine neuere Alternative zum
%
Bediener ist die Verwendungstr.format
. Hier ist ein Auszug aus der Dokumentation:Verweise
str.format
- SyntaxBeispiele
Hier einige Anwendungsbeispiele:
Siehe auch
quelle
'{self.author} in {self.publication}'.format(self=self)
"funktionieren" sollte. Ich bin mir einfach nicht sicherunicode
.{first[0]}
die Initiale abrufen könnenJ
.Sie müssen nur die Werte in Klammern setzen:
Hier wird zum ersten
%s
dasunicode(self.author)
platziert. Und zum zweiten%s
, dieunicode(self.publication)
verwendet werden.quelle
%s
dann eher noch vorschlagenformat
Bei einigen der bisher veröffentlichten Antworten gibt es ein erhebliches Problem:
unicode()
Dekodiert von der Standardkodierung, bei der es sich häufig um ASCII handelt. Tatsächlich wirdunicode()
versucht, die angegebenen Bytes "sinnvoll" zu machen, indem sie in Zeichen umgewandelt werden. Daher schlägt der folgende Code, der im Wesentlichen von früheren Antworten empfohlen wird, auf meinem Computer fehl:gibt:
Der Fehler ist darauf zurückzuführen, dass
author
nicht nur ASCII-Bytes (dh Werte in [0; 127]) enthalten sind undunicode()
standardmäßig (auf vielen Computern) aus ASCII dekodiert werden.Eine robuste Lösung besteht darin, die in Ihren Feldern verwendete Codierung explizit anzugeben. am Beispiel von UTF-8:
(oder ohne Initiale
u
, je nachdem, ob Sie ein Unicode-Ergebnis oder eine Byte-Zeichenfolge wünschen).An diesem Punkt könnte man das in Betracht ziehen mit
author
undpublication
Felder werden , um Strings Unicode, anstatt sie Decodierung während der Formatierung.quelle
Für Python2 können Sie dies auch tun
Das ist praktisch, wenn Sie viele Argumente zu ersetzen haben (insbesondere, wenn Sie Internationalisierung betreiben).
Python2.6 ab unterstützt
.format()
quelle
Sie können es auch sauber und einfach verwenden (aber falsch! Weil Sie es verwenden sollten,
format
wie Mark Byers sagte), indem Sie Folgendes tun:quelle
Der Vollständigkeit halber werden in Python 3.6 F-Strings in PEP-498 eingeführt . Diese Saiten machen es möglich
Das würde bedeuten, dass Sie für Ihr Beispiel auch Folgendes verwenden könnten:
quelle