140 votes

Comment créer une chaîne Python multiligne avec des variables en ligne ?

Je cherche un moyen propre d'utiliser des variables dans une chaîne Python multiligne. Imaginons que je veuille faire ce qui suit :

string1 = go
string2 = now
string3 = great

"""
I will $string1 there
I will go $string2
$string3
"""

Je cherche à savoir s'il existe quelque chose de similaire à $ en Perl pour indiquer une variable dans la syntaxe Python.

Sinon, quelle est la manière la plus propre de créer une chaîne de caractères multiligne avec des variables ?

210voto

Simeon Visser Points 30697

Le moyen le plus courant est le format() fonction :

>>> s = "This is an {example} with {vars}".format(vars="variables", example="example")
>>> s
'This is an example with variables'

Cela fonctionne bien avec une chaîne de format à plusieurs lignes :

>>> s = '''\
... This is a {length} example.
... Here is a {ordinal} line.\
... '''.format(length='multi-line', ordinal='second')
>>> print(s)
This is a multi-line example.
Here is a second line.

Vous pouvez également passer un dictionnaire avec des variables :

>>> d = { 'vars': "variables", 'example': "example" }
>>> s = "This is an {example} with {vars}"
>>> s.format(**d)
'This is an example with variables'

Les éléments les plus proches de ce que vous avez demandé (en termes de syntaxe) sont les suivants chaînes de modèles . Par exemple :

>>> from string import Template
>>> t = Template("This is an $example with $vars")
>>> t.substitute({ 'example': "example", 'vars': "variables"})
'This is an example with variables'

Je dois cependant ajouter que le format() est plus courante parce qu'elle est facilement disponible et qu'elle ne nécessite pas de ligne d'importation.

61voto

David Cain Points 5164

NOTE : La méthode recommandée pour effectuer le formatage des chaînes de caractères en Python est d'utiliser format() comme indiqué dans la réponse acceptée . Je préserve cette réponse comme un exemple de la syntaxe de style C qui est également supportée.

# NOTE: format() is a better choice!
string1 = "go"
string2 = "now"
string3 = "great"

s = """
I will %s there
I will go %s
%s
""" % (string1, string2, string3)

print(s)

Quelques lectures :

49voto

Vous pouvez utiliser Les chaînes f de Python 3.6 pour les variables à l'intérieur multi-ligne ou de longues chaînes d'une seule ligne. Vous pouvez spécifier manuellement les caractères de nouvelle ligne en utilisant \n .

Variables dans une chaîne de caractères de plusieurs lignes

string1 = "go"
string2 = "now"
string3 = "great"

multiline_string = (f"I will {string1} there\n"
                    f"I will go {string2}.\n"
                    f"{string3}.")

print(multiline_string)

Je vais y aller.
Je vais y aller maintenant.
grand

Variables dans une longue chaîne d'une seule ligne

string1 = "go"
string2 = "now"
string3 = "great"

singleline_string = (f"I will {string1} there. "
                     f"I will go {string2}. "
                     f"{string3}.")

print(singleline_string)

Je vais y aller. Je vais y aller maintenant. Super.


Vous pouvez également créer une chaîne f multiligne avec des guillemets triples.

multiline_string = f"""I will {string1} there.
I will go {string2}.
{string3}."""

14voto

Anshika Singh Points 456

Cordes en F également appelés "littéraux de chaîne formatés", sont des littéraux de chaîne qui ont un caractère f au début ; et des accolades contenant des expressions qui seront remplacées par leurs valeurs.

Les chaînes f sont évaluées au moment de l'exécution.

Votre code peut donc être réécrit comme suit :

string1="go"
string2="now"
string3="great"
print(f"""
I will {string1} there
I will go {string2}
{string3}
""")

Et ce sera évalué à :

I will go there
I will go now
great

Vous pouvez en savoir plus aquí .

12voto

Havok Points 1502

C'est ce que vous voulez :

>>> string1 = "go"
>>> string2 = "now"
>>> string3 = "great"
>>> mystring = """
... I will {string1} there
... I will go {string2}
... {string3}
... """
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, 'string3': 'great', '__package__': None, 'mystring': "\nI will {string1} there\nI will go {string2}\n{string3}\n", '__name__': '__main__', 'string2': 'now', '__doc__': None, 'string1': 'go'}
>>> print(mystring.format(**locals()))

I will go there
I will go now
great

0 votes

Notez que les guillemets triples """ préserve les nouvelles lignes, ce qui signifie qu'il y a une nouvelle ligne supplémentaire avant et après mystring

0 votes

Vous pouvez utiliser .strip() , .rstrip() ou .lstrip() ou placez un backlash à l'intérieur des guillemets triples pour éviter de créer une nouvelle ligne. mystring = """\ ABC\ """

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X