Le curseur clignote juste après la troisième accolade fermante et je n'ose pas appuyer sur entrée. Le plafonnier est éteint depuis un moment, il ne reste que la lumière de l'écran qui se pose sur le carrelage, et je relis ma ligne pour la troisième fois avant de lancer le script. C'est le genre de moment où toute la syntaxe python que je crois maîtriser en auto-formation se dérobe d'un coup, et où je redeviens une pure débutante en python face à une simple f-string censée juste afficher une phrase avec une variable dedans.
Avant de tomber sur les f-strings, j'avais essayé de suivre un manuel en anglais trouvé en ligne, plein de vocabulaire trop technique pour mon niveau, et j'avais fini par le refermer sans avoir rien retenu. Ma méthode, à l'époque, c'était la concaténation : coller des bouts de texte et des variables avec des signes plus, en espérant ne pas oublier un espace ou une parenthèse. Je restais parfois de longues minutes devant une erreur rouge, refusant de refermer l'ordinateur tant que je n'avais pas compris où le bât blessait. Ce qui a tout changé tient en une règle courte : un f collé juste devant le guillemet, une variable posée entre deux accolades, et plus besoin de coller du texte au forceps.
Le petit f qui remplace la concaténation
Une f-string, c'est simplement une chaîne de texte précédée d'un f collé juste avant le guillemet. On écrit sa phrase normalement et, à l'endroit où une variable doit apparaître, on ouvre une accolade. Là où la concaténation m'obligeait à transformer chaque nombre en texte avec str(), la f-string s'en charge toute seule. Ma ligne est devenue print(f"Bonjour, je m'appelle {nom} et j'ai {age} ans."), et pour une débutante en python qui comptait ses guillemets un par un, ça a changé beaucoup de choses.
Le préfixe s'écrit aussi bien en minuscule qu'en majuscule, même si presque tout le monde choisit le f minuscule par habitude. Cette petite lettre suffit à rendre l'instruction claire, sans négocier avec la machine accolade par accolade, un peu comme le jour où j'ai commencé à utiliser les conditions if else en python et où la logique du code a arrêté de me sembler hostile.
Comment glisser une variable sans passer par str()
La règle est simple : dès qu'une valeur change d'une exécution à l'autre, elle va entre les accolades, jamais collée au texte avec un signe plus. Un nombre, un nom, une date calculée ailleurs dans le script : tout rentre directement, sans conversion préalable. Je garde aussi un réflexe qui m'évite bien des erreurs, celui de vérifier que chaque accolade ouverte a sa fermante avant de lancer le script, parce qu'une accolade oubliée donne un message qui n'a rien d'évident pour qui débute.
Peut-on calculer directement entre les accolades ?
Oui, et c'est ce qui m'a vraiment convaincue de changer mes habitudes. On peut écrire une opération entière à l'intérieur des accolades, sans créer de variable intermédiaire juste pour un calcul ponctuel. Pour afficher un total avec une majoration, j'écris directement f"Le total est de {prix * 1.2} euros" et python fait le calcul au moment d'afficher la phrase. Ça évite une ligne de code en plus rien que pour stocker un résultat qu'on n'utilisera qu'une fois.
Ce genre d'écriture demande un peu de rigueur : une accolade mal fermée, une expression trop tordue à l'intérieur, et le message d'erreur redevient aussi confus qu'à l'époque de la concaténation. La limite que je m'impose maintenant : une variable ou un calcul court entre les accolades, jamais un raisonnement entier.
Quand freiner sur les f-strings
Il m'est arrivé de tout vouloir entasser dans une seule f-string : des calculs à rallonge, des appels de fonction imbriqués, dans l'idée que c'était plus élégant. Résultat, une ligne interminable que je ne comprenais plus moi-même le lendemain matin. Vouloir tout formater au même endroit, c'est l'erreur qui revient le plus souvent chez les débutants, moi la première, et ça nuit autant à la lisibilité qu'à la fiabilité du script dès que les données à afficher se compliquent.
Depuis, je calcule le résultat sur une ligne à part quand l'opération devient un peu longue, puis je l'affiche proprement dans la f-string suivante. Comme en cuisine, un ingrédient fort ne va pas forcément dans tous les plats : une f-string qui fait tout le travail d'un coup finit par masquer ce qu'elle est censée simplifier. Ce recul est venu au même moment où j'ai appris à utiliser try except en python pour éviter les bugs : mieux vaut découper un problème que d'espérer qu'une seule ligne magique s'en occupe.
Les repères à garder en tête
Le repère le plus simple reste celui-ci : si une valeur peut changer, elle va entre accolades ; si le texte devient trop long à lire d'un coup, on le découpe en plusieurs lignes. Cette logique m'a suivie tout au long de ma formation python pour progresser en solo, bien après les f-strings d'ailleurs, pour à peu près tout ce que j'écris.
Il reste des messages d'erreur que je ne décode pas du premier coup, et des bouts de syntaxe python que je découvre encore en avançant. Mais entre une f-string bien accolée et une accolade oubliée, la différence se voit tout de suite à l'écran, et c'est largement suffisant pour continuer d'écrire des scripts un peu plus tranquillement le soir.