Python et les f-string

Posted on dim. 05 août 2018 in Développement

Présentation des f-string

Depuis la version 3.6, Python a introduit les f-string, une forme de notation reprenant le principe de la fonction format, mais en plus simple. Ces f-string sont tout simplement des variables texte précédées de la lettre f (ou F, les deux fonctionnent), et permettent d’introduire des variables (texte, nombres…) dans une chaine de caractères, sans passer par les fonctions de substitution classiques.

>>> mavariable = 'f-string'
>>> print(f'Je suis une {mavariable}')
'Je suis une f-string'

Pas mal, non ? Si on avait voulu faire ça sans les f-string, il eut fallu saisir:

>>> print('Je suis une {}'.format(mavariable))

Un peu plus loin…

Avec des variables de classe

Là où ça devient intéressant, c’est qu’il est possible de faire des appels à des variables de classe. Jugez plutôt :

class People:
    def __init__(self, name):
        self.name = name
    def presenter(self):
        return f'Je suis {self.name}'

moi = People('Jerry')
print(moi.presenter())

Exécuter ce fichier vous donnera le résultat suivant : Je suis Jerry. Pour arriver à ce résultat avant l’introduction des f-string, il aurait fallu remplacer la fonction presenter par:

def presenter(self):
    return 'Je suis {}'.format(self.name)

Avec des fonctions

Allez, encore mieux, toujours en se basant sur la classe People définie précédemment.

>>> print('Résultat de moi.presenter(): {moi.presenter()}')
'Résultat de moi.presenter(): Je suis Jerry'

Et si on ajoutait des paramètres à une fonction (que nous allons changer, pour l’occasion) ?

>>>def presenter(nom, fonction):
...    return f'Je suis {nom}, profession : {fonction}'
...
>>>presenter('Jerry', 'Géologue')
'Je suis Jerry, profession : Géologue'
>>>print(f'Petite présentation : {presenter("Jerry", "Géologue")}')
'Petite présentation : Je suis Jerry, profession : Géologue

Les f-string accèptent, comme vous le voyez, des fonctions avec paramètres. Pensez bien à bien fermer les différentes parenthèses, accolades… et à faire attention aux différents guillemets que vous utilisez.

En conclusion

Les f-string ne changent pas la face du monde. Le formatage de chaînes existait déjà avant. Ceci-dit, utilisée correctement, cette fonctionnalité peut permettre une meilleure lisibilité du code.

>>>print('Bloc de volume {} m³, masse {} kg'.format(bloc.volume, bloc.masse())
'Bloc de volume 1 m³, masse 2500 kg'
# Voici qui est un peu plus lisible, non ?
>>>print('Bloc de volume {bloc.volume} m³, masse {bloc.masse()} kg')
'Bloc de volume 1 m³, masse 2500 kg'

Si votre projet doit reposer sur Python 3.6 au moins, n’hésitez pas à l’utiliser. Si vous devez garder une compatibilité avec d’anciennes versions de Python 3, là… Restez sur le bon vieux format.