2016-03-02 9 views
27

Ich versuche Python 3.6. durch neue Code gehen, stieß ich auf diese neue Syntax:String mit 'f' Präfix in Python-3.6

f"My formatting string!" 

Es scheint, dass wir Dinge wie diese tun können:

>>> name = "George" 
>>> print(f"My cool string is called {name}.") 
My cool string is called George. 

Kann jemand etwas Licht auf das Innenleben dieses vergießen? Was ist der Gültigkeitsbereich der Variablen, die ein mit f-Präfix versehener String annehmen kann?

Antwort

28

Siehe PEP 498 Literal String Interpolation:

Die Ausdrücke, die aus der Zeichenfolge extrahiert werden, werden im Rahmen ausgewertet, wo die f-string erschien. Dies bedeutet, dass der Ausdruck vollen Zugriff auf lokale und globale Variablen hat. Jeder gültige Python-Ausdruck kann verwendet werden, einschließlich Funktions- und Methodenaufrufen.

Also werden die Ausdrücke so ausgewertet, als ob sie im selben Umfang vorkommen; Locals, Closures und Globals funktionieren alle im selben Kontext wie in anderem Code.

Sie finden weitere Informationen in den reference documentation finden:

Ausdrücke in formatiertem Stringliterale wie Ausdrücke in runden Klammern regelmäßige Pythons behandelt werden, mit wenigen Ausnahmen. Ein leerer Ausdruck ist nicht zulässig, und ein Ausdruck lambda muss von expliziten Klammern umgeben sein. Ersatzausdrücke können Zeilenumbrüche enthalten (z. B. in Strings mit drei Anführungszeichen), sie können jedoch keine Kommentare enthalten. Jeder Ausdruck wird in dem Kontext ausgewertet, in dem das formatierte Zeichenfolgeliteral in der Reihenfolge von links nach rechts angezeigt wird.

Da Sie eine 3.6 Alpha-Version ausprobieren, lesen Sie bitte die What's New In Python 3.6 documentation. Es fasst alle Änderungen zusammen, einschließlich Links zu den relevanten Dokumentationen und PEPs.

Und nur um klar zu sein: 3.6 ist nicht freigegeben noch; Das erste Alpha wird voraussichtlich erst im Mai 2016 veröffentlicht. Siehe 3.6 release schedule.

+1

Ist zu erwarten, dass f-Strings in früheren Versionen von python3 zurückportiert werden (wenn sie starken Einsatz in neuem Code zu finden)? Ich bin nicht in der Lage, eine Antwort auf diese oder jene Weise zu finden, aber dies scheint ein Streitpunkt zu sein. –

+0

Es gibt keine Pläne, dies rückzuvermitteln, nein. Die PEP gibt an, dass dies ein neues Feature für 3.6 ist. –

+0

Danke. Ich habe versucht, es mit dem Enum PEP zu vergleichen, der neu war, aber schließlich zu früheren 3.x-Versionen rückportiert wurde, und ich sah nichts, was auf einen Plan hindeutete. –

2

f-strings unterstützt auch alle Python-Ausdrücke innerhalb der geschweiften Klammern.

print(f"My cool string is called {name.upper()}.")