Python fait-il une interpolation de variable similaire à "string #{var}" dans Ruby?
En Python, il est fastidieux d'écrire:
print "foo is" + bar + '.'
Puis-je faire quelque chose comme ça en Python?
print "foo is #{bar}."
9 réponses
Python 3.6 + a une interpolation variable-ajoutez un f
à votre chaîne:
f"foo is {bar}"
Pour les versions de Python ci-dessous (Python 2-3.5), vous pouvez utiliser str.format
pour transmettre des variables:
# Rather than this:
print("foo is #{bar}")
# You would do this:
print("foo is {}".format(bar))
# Or this:
print("foo is {bar}".format(bar=bar))
# Or this:
print("foo is %s" % (bar, ))
# Or even this:
print("foo is %(bar)s" % {"bar": bar})
Python 3.6 aura a interpolation de chaîne littérale en utilisant F-strings :
print(f"foo is {bar}.")
Python 3.6 a introduit f-cordes:
print(f"foo is {bar}.")
Ancienne réponse:
Depuis la version 3.2 Python a str.format_map
qui, ensemble, avec locals()
ou globals()
vous permet de faire rapide:
Python 3.3.2+ (default, Feb 28 2014, 00:52:16)
>>> bar = "something"
>>> print("foo is {bar}".format_map(locals()))
foo is something
>>>
, j'ai appris la technique suivante à partir de Python de Référence Essentiel:
>>> bar = "baz"
>>> print "foo is {bar}.".format(**vars())
foo is baz.
Ceci est très utile lorsque nous voulons faire référence à de nombreuses variables dans la chaîne de formatage:
- nous n'avons pas à répéter toutes les variables de la liste d'arguments: comparez-la aux approches explicites basées sur des arguments de mots-clés (telles que
"{x}{y}".format(x=x, y=y)
et"%(x)%(y)" % {"x": x, "y": y}
). - Nous n'avons pas à vérifier un par un si l'ordre des variables dans la liste d'arguments est cohérent avec leur ordre dans l' chaîne de formatage: comparez-la aux approches basées sur des arguments positionnels (telles que
"{}{}".format(x, y)
,"{0}{1}".format(x, y)
et"%s%s" % (x, y)
).
Je préfère cette approche parce que vous n'avez pas à vous répéter en référençant la variable deux fois:
alpha = 123 print 'The answer is {alpha}'.format(**locals())
Il y a une grande différence entre cela dans Ruby:
print "foo is #{bar}."
Et ceux-ci en Python:
print "foo is {bar}".format(bar=bar)
Dans le Rubis exemple, bar
est évalué
Dans L'exemple Python, bar
est juste une clé du dictionnaire
Dans le cas où vous utilisez simplement des variables, le comportement est plus ou moins le même, mais en général, convertir Ruby en Python n'est pas si simple
Oui, absolument. Python, à mon avis, a un grand support pour le formatage des chaînes, les remplacements et les opérateurs.
Cela peut être utile:
http://docs.python.org/library/stdtypes.html#string-formatting-operations
Presque toutes les autres réponses n'ont pas fonctionné pour moi. Probablement parce que je suis sur Python3. 5. La seule chose qui a fonctionné est:
print("Foobar is %s%s" %('Foo','bar',))