Dieser %Zeichenfolgenoperator wird in Python 3.1 "veraltet und später entfernt" docs.python.org/release/3.0.1/whatsnew/…. Jetzt frage ich mich, was sowohl für die Versionskompatibilität als auch für die Sicherheit der am besten empfohlene Weg ist.
Cregox
2
@Cawas Ich weiß, dass dies ziemlich spät ist, aber ich benutze es gerne str.format(). Beispiel: query = "SELECT * FROM {named_arg}"; query.format(**kwargs)Wo queryist die Formatzeichenfolge und kwargsist ein Wörterbuch mit Schlüsseln, die mit den named_args in der Formatzeichenfolge übereinstimmen .
Edwin
4
@Cawas Ja, außer Adam Tupels Notation verwendet, wobei {0}, {1}, {2}und so weiter , entsprechen Tupels Indizes 0, 1und 2, respectively. Alternativ ist es auch möglich, die Argumente (wie {named_arg}) zu benennen und jedes in der Formatmethode festzulegen, wie folgt:'Hi {fname} {lname}!'.format(fname='John', lname='Doe')
Edwin
2
@bignose Sie haben beide Fragen Duplikate voneinander markiert, es ist wie google.com/…
Es scheint sehr wenig Sinn zu machen, diese doppelte Antwort zu geben. Hier ist noch eine: '% (string_goes_here) Hallo Welt% (string_goes_here) Hallo Welt% (string_goes_here)'% {'string_goes_here': s,}. Es gibt praktisch unendlich viele Möglichkeiten.
Mhawke
3
mhawke: Ich habe die Nachricht gepostet, bevor mein Browser die Seite neu lädt, sodass ich zu diesem Zeitpunkt nicht wusste, dass die Frage bereits beantwortet wurde. Du musst kein unhöflicher Mann sein !!
Lucas S.
2
@Lucas: Ich nehme an, es ist möglich, dass du 13 Minuten gebraucht hast, um deine Antwort einzugeben :) und danke für die Abwertung ... sehr geschätzt.
Mhawke
13
Kommt darauf an, was du mit besser meinst. Dies funktioniert, wenn Ihr Ziel die Beseitigung von Redundanz ist.
s='foo'
string='%s bar baz %s bar baz %s bar baz'%(3*(s,))
Ich denke, dass das Beispiel in der Frage nicht über "Hallo Welt" wiederholt wurde, sondern eine echte Vorlage ohne Duplizierung. Deshalb habe ich abgelehnt.
Gra
1
Fstrings
Wenn Sie verwenden Python 3.6+, können Sie die neue so genannte f-stringsZeichenfolge verwenden, die für formatierte Zeichenfolgen steht. Sie können sie verwenden, indem Sie das Zeichen fam Anfang einer Zeichenfolge hinzufügen , um diese als F-Zeichenfolge zu identifizieren .
price =123
name ="Jerry"print(f"{name}!!, {price} is much, isn't {price} a lot? {name}!")>Jerry!!,123is much, isn't 123 a lot? Jerry!
Die Hauptvorteile der Verwendung von F-Strings bestehen darin, dass sie besser lesbar sind, schneller sind und eine bessere Leistung bieten:
Quellpandas für alle: Python-Datenanalyse, Von Daniel Y. Chen
Benchmarks
Kein Zweifel, dass die neuen f-stringsbesser lesbar sind, da Sie die Zeichenfolgen nicht neu zuordnen müssen, aber ist es schneller, wie im oben genannten Zitat angegeben?
price =123
name ="Jerry"def new():
x = f"{name}!!, {price} is much, isn't {price} a lot? {name}!"def old():
x ="{1}!!, {0} is much, isn't {0} a lot? {1}!".format(price, name)import timeit
print(timeit.timeit('new()', setup='from __main__ import new', number=10**7))print(timeit.timeit('old()', setup='from __main__ import old', number=10**7))>3.8741058271543776#new>5.861819514350163#old
Mit 10 Millionen Tests scheint es, dass die neuen f-stringstatsächlich schneller im Mapping sind.
%
Zeichenfolgenoperator wird in Python 3.1 "veraltet und später entfernt" docs.python.org/release/3.0.1/whatsnew/…. Jetzt frage ich mich, was sowohl für die Versionskompatibilität als auch für die Sicherheit der am besten empfohlene Weg ist.str.format()
. Beispiel:query = "SELECT * FROM {named_arg}"; query.format(**kwargs)
Woquery
ist die Formatzeichenfolge undkwargs
ist ein Wörterbuch mit Schlüsseln, die mit dennamed_arg
s in der Formatzeichenfolge übereinstimmen .{0}
,{1}
,{2}
und so weiter , entsprechen Tupels Indizes0
,1
und2
, respectively. Alternativ ist es auch möglich, die Argumente (wie{named_arg}
) zu benennen und jedes in der Formatmethode festzulegen, wie folgt:'Hi {fname} {lname}!'.format(fname='John', lname='Doe')
Antworten:
Sie können die erweiterte Zeichenfolgenformatierung verwenden , die in Python 2.6 und Python 3.x verfügbar ist:
quelle
result = '{st} hello world {st} hello world {st}'.format(st=incoming)
Vielleicht möchten Sie dies lesen, um ein Verständnis zu erlangen: Zeichenfolgenformatierungsvorgänge .
quelle
Sie können den Wörterbuch-Formatierungstyp verwenden:
quelle
Kommt darauf an, was du mit besser meinst. Dies funktioniert, wenn Ihr Ziel die Beseitigung von Redundanz ist.
quelle
quelle
Fstrings
Wenn Sie verwenden
Python 3.6+
, können Sie die neue so genanntef-strings
Zeichenfolge verwenden, die für formatierte Zeichenfolgen steht. Sie können sie verwenden, indem Sie das Zeichenf
am Anfang einer Zeichenfolge hinzufügen , um diese als F-Zeichenfolge zu identifizieren .Quellpandas für alle: Python-Datenanalyse, Von Daniel Y. Chen
Benchmarks
Kein Zweifel, dass die neuen
f-strings
besser lesbar sind, da Sie die Zeichenfolgen nicht neu zuordnen müssen, aber ist es schneller, wie im oben genannten Zitat angegeben?Mit 10 Millionen Tests scheint es, dass die neuen
f-strings
tatsächlich schneller im Mapping sind.quelle