web-dev-qa-db-fra.com

Chaîne avec le préfixe 'f' en python-3.6

J'essaie Python 3.6. En parcourant un nouveau code, je suis tombé sur cette nouvelle syntaxe:

f"My formatting string!"

Il semble que nous puissions faire des choses comme celle-ci:

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

Quelqu'un peut-il nous éclairer sur les rouages ​​de ce processus? En particulier quelle est la portée des variables qu'une chaîne avec préfixe f peut prendre?

51
DevShark

Voir PEP 498 Interpolation de chaîne littérale :

Les expressions extraites de la chaîne sont évaluées dans le contexte où la chaîne f est apparue. Cela signifie que l'expression dispose d'un accès complet aux variables locales et globales. Toute expression Python valide peut être utilisée, y compris les appels de fonction et de méthode.

Les expressions sont donc évaluées comme si elles apparaissaient dans la même portée; les sections locales, les fermetures et les globales fonctionnent tous de la même manière que dans les autres codes du même contexte.

Vous trouverez plus de détails dans le documentation de référence :

Les expressions figurant dans les littéraux de chaîne mis en forme sont traitées comme des expressions régulières Python entourées de parenthèses, à quelques exceptions près. Une expression vide n'est pas autorisée et une expression lambda doit être entourée d'un caractère explicite. Les expressions de remplacement peuvent contenir des sauts de ligne (p.ex. dans des chaînes triples), mais elles ne peuvent pas contenir de commentaires, chaque expression étant évaluée dans le contexte où le littéral de chaîne formaté apparaît, dans l'ordre, de gauche à droite.

Puisque vous essayez une version 3.6 alpha, veuillez lire le Quoi de neuf dans Python 3.6 documentation . Il récapitule toutes les modifications, y compris des liens vers la documentation et les PEP pertinents.

Et juste pour être clair: 3.6 n’est pas encore publié ; le premier alpha ne devrait pas être publié avant mai 2016. Voir le calendrier des versions 3.6 .

43
Martijn Pieters

Il peut également être intéressant de noter que ce PEP498 a un port de retour à Python <3.6

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

Les chaînes de caractères supportent également toutes les expressions Python à l'intérieur des accolades.

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