web-dev-qa-db-fra.com

Est-ce que Python fait une interpolation 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}."

33
mko

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 passer 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})
48
Sean Vieira

Python 3.6 aura a interpolation de chaîne littérale en utilisant les chaînes f :

print(f"foo is {bar}.")
25
AXO

Python 3.6 a introduit des chaînes f :

print(f"foo is {bar}.")

Ancienne réponse:

Depuis la version 3.2 Python a str.format_map qui avec locals() ou globals() vous permet de faire vite:

Python 3.3.2+ (default, Feb 28 2014, 00:52:16) 
>>> bar = "something"
>>> print("foo is {bar}".format_map(locals()))
foo is something
>>> 
10
warvariuc

J'ai appris la technique suivante de Python Essential Reference :

>>> 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 basées sur des arguments de mots clés explicites (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 la chaîne de formatage: comparez-le aux approches basées sur des arguments positionnels (telles que "{}{}".format(x, y), "{0}{1}".format(x, y) et "%s%s" % (x, y)).
8
dkim

Formatage des chaînes

>>> bar = 1
>>> print "foo is {}.".format(bar)
foo is 1.
5
Josiah

Je préfère cette approche car vous n'avez pas à vous répéter en référençant la variable deux fois:

 alpha = 123 
 print 'La réponse est {alpha}'. format (** locaux ()) 
2
Chris Johnson

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 l'exemple Ruby exemple, bar est évalué
Dans l'exemple Python, bar n'est qu'une clé du dictionnaire

Dans le cas où vous utilisez simplement des variables, elles se comportent plus ou moins de la même manière, mais en général, la conversion Ruby to Python n'est pas aussi simple que cela)

2
John La Rooy

Oui absolument. Python, à mon avis, a un grand support pour le formatage des chaînes, les remplacements et les opérateurs.

Cela pourrait être utile:
http://docs.python.org/library/stdtypes.html#string-formatting-operations

0
Edmon