Les f-Strings sont disponibles à partir de Python 3.6 et sont très utiles pour formater les chaînes:
>>> n='you'
>>> f'hello {n}, how are you?'
'hello you, how are you?'
En savoir plus à leur sujet dans f-Strings de Python 3: une syntaxe de formatage de chaîne améliorée (Guide) . J'ai trouvé un modèle intéressant:
Notez que l'utilisation d'accolades triples entraînera la présence d'accolades simples dans votre chaîne:
>>> f"{{{74}}}" '{74}'
Cependant, vous pouvez obtenir plus d'accolades à afficher si vous utilisez plus de trois accolades:
>>> f"{{{{74}}}}" '{{74}}'
Et c'est exactement le cas:
>>> f'{74}'
'74'
>>> f'{{74}}'
'{74}'
Maintenant, si nous passons de deux {
à trois, le résultat est le même:
>>> f'{{{74}}}'
'{74}' # same as f'{{74}}' !
Il nous faut donc jusqu'à 4! ( {{{{
) pour obtenir deux accolades en sortie:
>>> f'{{{{74}}}}'
'{{74}}'
Pourquoi est-ce? Que se passe-t-il avec deux accolades pour que Python en ait besoin d'un supplémentaire à partir de ce moment?
python
python-3.x
string
formatting
f-string
fedorqui 'SO arrête de nuire'
la source
la source
f"{{2+2}}"
etf"{{{2+2}}}"
, qui sont'{2+2}'
et'{4}'
respectivementf'{2+2}'
renvoie 4,f'{{2+2}}'
renvoie 2 + 2,f'{{{2+2}}}'
➝ {4},f'{{{{2+2}}}}'
➝ {{2 + 2}} et ainsi de suite. Cela a du sens mais laisse un peu perplexe à première vue.f'{74}'
c'est la même chose quef'74'
.str.format
fait aussi."{74}".format(...)
nécessiterait une séquence d'au moins 74 éléments.Réponses:
Les accolades doubles échappent aux accolades, de sorte qu'aucune interpolation ne se produit:
{{
➝{
et}}
➝}
. Et74
reste une chaîne inchangée,'74'
.Avec les croisillons triples, les doubles croisillons extérieurs s'échappent, comme ci-dessus. Les accolades internes, d'autre part, conduisent à une interpolation de chaîne régulière de la valeur
74
.Autrement dit, la chaîne
f'{{{74}}}'
équivaut àf'{{ {74} }}'
, mais sans espaces (ou, de manière équivalente, à'{' + f'{74}' + '}'
).Vous pouvez voir la différence lors du remplacement de la constante numérique par une variable:
la source