f-strings

Par Thibaut Piquerez 1

Introduction

Depuis Python 3.6, f-strings (PEP 498) permet d’insérer des expressions dans des chaines de caractères en utilisant une syntaxe minimale. Ces expressions servent à insérer des variables dans les chaines de caractères et de les mettre en forme.

Fonctionnement

Pour utiliser f-strings il suffit de mettre un f devant la chaine de caractères et pour insérer la valeur d’une variable dans la chaine il suffit de mettre la variable entre accolade. Si il n’y a pas de variable a substituer il n’est pas nécessaire de mettre le f devant.

>>> name = 'Paul'
>>> age = 23

>>> print(f'Votre nom est un {name} et vous avez {age} ans')
Votre nom est un Paul et vous avez 23 ans

f-strings prend également en compte les fonctions ce qui signigfie que les fonctions qui se trouvent dans la chaine de caractères sont exécutées et le résultat est affiché.

Échappement

Certains cractères ne peuvent pas être afficher tel quel il est nécessaire de les échapper.

Pour les accolade {} il faut en mettre deux à la suite :

>>> nombre = 34
>>> print(f'Le nombre est {{{nombre}}}')

Le nombre est {34}

Pour afficher des apostrophes, il y a trois solutions:

Mettre la chaine entre guillemets :

>>> print("ma chaine de caractères avec des 'apostrophes' ")

ma chaine de caractères avec des 'apostrophes'

Mettre la chaine entre 3 apostrophes :

>>> print('''ma chaine de caractères avec des 'apostrophes' ''')

ma chaine de caractères avec des 'apostrophes'

Mettre des backslash avant les apostrophes :

>>> print('ma chaine de caractères avec une \'apostrophe ')

ma chaine de caractères avec des 'apostrophes

Raw f-strings

Un string convertit automatiquement les échappements avec des backslashs comme par exemple : \n , \", \t, etc. Donc si on ne veut pas que python interprète ces échappements il faut utiliser les raw string en ecrivant r avant la chaine de caractères et si on veut utiliser des raw f-strings il faut mettre fr.

>>> print('ma \n phrase')
ma
 phrase

>>> print(r'ma \n phrase')
ma \n phrase

Options de formattage

f-strings implémente également une manière de mettre en forme les nombres.

Voici la syntaxe pour utiliser le formattage (voir Format Specification Mini-Language):

f ' <texte> { <expression/variable> : <format> } <texte> ... '

Le format se trouve sous cette forme pour les nombres à virgule:

[alignement][signe][largeur][groupage][.précision][type]
  • alignementdétermine ou le nombre est aligné dans sa zone
    • “>” aligne à droite

    • “<” aligne à gauche

    • “^” centré

    • “=” aligne le signe à gauche et le nombre à droite

  • signedétermine l’affichage du signe
    • “+” indique que le signe + doit être affiché ainsi que le -

    • “-“ indique que le signe - doit être affiché (par defaut)

    • “ “ n’affiche pas le + mais insére un espace à la place

  • largeur : détermine la place qui doit être réservée pour l’affichage du nombre

  • groupagedétermine le symbole de séparation tous les 3 chiffres
    • “_”

    • “,”

  • précision : détermine le nombre de chiffres après la virgule

  • typedétermine le mode d’affichage
    • “e” ou “E” notation scientifique

    • “f” ou “F” affichage classique

Exemple :

>>> nombre = 357568.12312
>>> nombre2 = 568.568768
>>> nombre3 = -34.3432
>>> nombre4 = 23
>>> print(f'{nombre : >+20_.4f} {nombre2 : >+20_.4f}')
>>> print(f'{nombre3 : >+20_.4f} {nombre4 : >+20_.4f}')

+357_568.1231            +568.5688
     -34.3432             +23.0000

C’est très pratique pour faire des tableaux de nombre.

Il existe aussi des option de formattage pour les entiers il suffit simplement de mettre une lettre pour le format:

  • “b” : affiche en binaire

  • “c” : affiche le caractère correspondant au code unicode

  • “d” : affiche en decimal (par defaut)

  • “o” : affiche en octal

  • “x” ou “X” : affiche en hexa

Exemple :

>>> chmod = 0o644
>>> f'{chmod:016b}'
'0000110100100'

Conclusion

Avantage de f-strings:

  • variable introduit directement dans les chaines de caractères

  • concaténation des chaines de caractères sans “+”

  • formattage simplifié des nombres

  • alignement du texte simplifié

  • temps d’execution plus court

f-strings est un complément très utile aux string classiques en simplifiant la manière d’utiliser des chaines de caractères. Le code à taper est plus simple et également plus court et qui dit moins de code dit moins d’erreurs.

1

<thibaut.piquerez@he-arc.ch>