wake-up-neo.com

String mit 'f' Präfix in Python-3.6

Ich probiere aus Python 3.6. Beim Durchlaufen des neuen Codes bin ich auf diese neue Syntax gestoßen:

f"My formatting string!"

Anscheinend können wir Folgendes tun:

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

Kann irgendjemand etwas Licht in das Innenleben bringen? Welchen Gültigkeitsbereich haben die Variablen, die eine Zeichenfolge mit F-Präfix haben kann?

51
DevShark

Siehe PEP 498 Literal String Interpolation :

Die Ausdrücke, die aus der Zeichenfolge extrahiert werden, werden in dem Kontext ausgewertet, in dem die f-Zeichenfolge angezeigt wurde. 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.

Die Ausdrücke werden also so ausgewertet, als würden sie im selben Bereich erscheinen. Locals, Closures und Globals funktionieren im selben Kontext wie in anderem Code.

Weitere Details finden Sie in der Referenzdokumentation :

Ausdrücke in formatierten Zeichenfolgenliteralen werden mit wenigen Ausnahmen wie reguläre Python in Klammern gesetzte Ausdrücke behandelt. Ein leerer Ausdruck ist nicht zulässig, und ein Ausdruck lambda muss durch explizite Ausdrücke umgeben sein Klammern: Ersetzungsausdrücke können Zeilenumbrüche enthalten (z. B. in Strings in dreifachen Anführungszeichen), aber keine Kommentare. Jeder Ausdruck wird in dem Kontext ausgewertet, in dem das formatierte String-Literal in der Reihenfolge von links nach rechts angezeigt wird.

Da Sie einen 3.6-Alpha-Build ausprobieren, lesen Sie bitte die Was ist neu in Python 3.6 Dokumentation . Es fasst alle Änderungen zusammen, einschließlich Links zu den relevanten Dokumentationen und PEPs.

Und um es klar zu machen: 3.6 ist noch nicht veröffentlicht ; Das erste Alpha wird voraussichtlich nicht vor Mai 2016 veröffentlicht. Siehe .6 Release Schedule .

43
Martijn Pieters

Es kann auch erwähnenswert sein, dass dieser PEP498 einen Backport zu Python <3.6 hat

pip install fstring

from fstring import fstring

x = 1

y = 2.0

plus_result = "3.0"

print fstring("{x}+{y}={plus_result}")

# Prints: 1+2.0=3.0
6
RinSlow

f-Strings unterstützen auch beliebige Python Ausdrücke in geschweiften Klammern.

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