Python : fstrings

De Justine's wiki
Aller à la navigation Aller à la recherche

Le formatage de string, méthode Python3

https://realpython.com/python-f-strings/

On peut désormais se débarrasser des anciennes syntaxes :

print("{}".format(var))
print("%s"%var)

On peut appeller des fonctions :

>>> def texter():
...     return "This is a sample text"
... 
>>> print(f"{texter()}")
This is a sample text

... ainsi que des expressions logiques :

>>> def texter():
...     return "This is a sample text"
... 
>>> print(f"{texter()}")
This is a sample text

...voire séparer un print sur plusieurs lignes (ne pas oublier le f devant chaque expression):

>>> print(f"First "
... f"Second "
... f"Third")
First Second Third

...ou même écrire sur plusieurs lignes:

>>> print(f"""
... Les sanglots longs
... Des violons
... De l'automne"""
... 
... )

Les sanglots longs
Des violons
De l'automne

Quelques détails

Quotes

Tous les types de quotes fonctionnent de façon normale :

>>> print(f"hello")
hello
>>> print(f'Hi')
Hi
>>> print(f'''Ahoy''')
Ahoy

Dictionnaires

Attention avec les dictionnaires : il vaut mieux garder l'habitude d'écrire les dictionnaires en simples quotes, les strings en double :

>>> comedian = {'name': 'Eric Idle', 'age': 74}
>>> f"The comedian is {comedian['name']}, aged {comedian['age']}."
The comedian is Eric Idle, aged 74.

Cela fonctionne.

Cependant :

>>> comedian = {'name': 'Eric Idle', 'age': 74}
>>> f'The comedian is {comedian['name']}, aged {comedian['age']}.'
  File "<stdin>", line 1
    f'The comedian is {comedian['name']}, aged {comedian['age']}.'
                                    ^
SyntaxError: invalid syntax

Renvoie une erreur. Les simples quotes du dictionnaire viennent refermer celles de la chaîne de caractères.

Accolades

Pour faire apparaître une accolade, il faut la doubler :

>>> f"{{74}}"
'{74}'
>>> f"{{{74}}}"
'{74}'
>>> f"{{{{74}}}}"
'{{74}}'

Backslash & commentaires

On peut utiliser des backslashs pour échapper une partie de la chaîne, mais on ne peut les utiliser dans l'expression logique en elle-même :

>>> f"{\"Eric Idle\"}"
  File "<stdin>", line 1
    f"{\"Eric Idle\"}"
                      ^
SyntaxError: f-string expression part cannot include a backslash

De la même façon, attention aux commentaires dans les expressions :

>>> f"Eric is {2 * 37 #Oh my!}."
  File "<stdin>", line 1
    f"Eric is {2 * 37 #Oh my!}."
                                ^
SyntaxError: f-string expression part cannot include '#'