2010-10-06 7 views
34

Ceci est probablement une question très simple pour certains, mais il m'a étonné. Pouvez-vous utiliser des variables dans les guillemets de python?En Python, pouvez-vous avoir des variables entre guillemets? Si c'est le cas, comment?

Dans l'exemple suivant, comment faire utiliser des variables dans le texte:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on %wash_clothes 
I like to clean dishes %clean_dishes 
""" 

print(mystring) 

Je voudrais à entraîner:

I like to wash clothes on tuesdays 
    I like to clean dishes never 

Sinon quelle est la meilleure façon de gérer de gros morceaux de texte où vous avez besoin de quelques variables, et il y a une tonne de texte et de caractères spéciaux?

Répondre

31

Une des façons:

>>> mystring =""" I like to wash clothes on %s 
... I like to clean dishes %s 
... """ 
>>> wash_clothes = 'tuesdays' 
>>> clean_dishes = 'never' 
>>> 
>>> print mystring % (wash_clothes, clean_dishes) 
I like to wash clothes on tuesdays 
I like to clean dishes never 

Regardez aussi le formatage de chaîne

+0

qui est parfait. Merci beaucoup! C'est exactement ce que je cherchais! Je ne comprends pas exactement comment python sait quel% s remplacer avec quelle variable, cependant. Est-ce qu'il regarde l'ordre dans lequel les variables apparaissent dans ce qui suit: impression mystring% (wash_clothes, clean_dishes) –

+0

@XL: Vous pouvez jeter un oeil à l'autre technique de mise en forme pour laquelle j'avais fourni le lien mais l'exemple. L'exemple a été fourni par NullUserException.Vous pouvez utiliser les deux techniques. – pyfunc

6

Oui. Je crois que cela fonctionnera.

do_stuff = "Tuesday"

mystring = """I like to do stuff on %(tue)s""" % {'tue': do_stuff}

EDIT: oublièrent un 's' dans le spécificateur de format.

+3

Si vous voulez marquer une réponse, veuillez dire pourquoi, afin que nous puissions tous apprendre de l'erreur. – jonesy

+1

Ceci est idéal pour les variables répétées – AliBZ

42

La meilleure façon de faire est d'utiliser str.format() plutôt que la méthode utilisant %:

Cette méthode de mise en forme de chaîne est la nouvelle norme en Python 3.0, et doit être préféré à la % mise en forme décrite dans la chaîne Opérations de formatage dans le nouveau code.

Exemple:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on {0} 
I like to clean dishes {1} 
""" 

print mystring.format(wash_clothes, clean_dishes) 
8

Je pense que la façon la plus simple est str.format() comme d'autres l'ont dit.

Cependant, je pensais que je mentionnerais que Python a une classe string.Template commençant en Python2.4.

Voici un exemple tiré des docs.

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 

Une des raisons pour lesquelles j'aime cela est l'utilisation d'un mapping à la place des arguments positionnels.

+0

C'est une approche intéressante. Je n'aime vraiment pas les arguments positionnels car cela peut devenir difficile si vous avez un très grand nombre de variables. La seule question que j'ai est de savoir si cette méthode vaut la peine si vous avez des quantités massives de texte formaté et des caractères spéciaux dans la chaîne de modèle. –

+2

vous pouvez utiliser des arguments positionnels avec 'format'. 'd = dict (foo = 1, bar = 2); "{foo} {bar}". format (** d) ' – aaronasterling

+0

@martineau. Ouaip. C'était vraiment un tipo. – aaronasterling

1

Notez également que vous n'avez pas besoin de la variable intermédiaire:

name = "Alain" 
print """ 
Hello %s 
""" % (name) 
Questions connexes