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}."

31
demandé sur smci 2012-08-03 06:33:39

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})
43
répondu Sean Vieira 2018-09-08 00:47:01

Python 3.6 aura a interpolation de chaîne littérale en utilisant F-strings :

print(f"foo is {bar}.")
24
répondu AXO 2017-02-18 12:31:05

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
>>> 
9
répondu warvariuc 2017-09-22 11:29:48

, 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)).
8
répondu dkim 2012-08-06 17:49:05

Mise en forme de Chaîne

>>> bar = 1
>>> print "foo is {}.".format(bar)
foo is 1.
4
répondu Josiah 2012-08-03 02:38:22

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())
2
répondu Chris Johnson 2012-08-03 02:55:48

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

2
répondu John La Rooy 2012-08-03 02:56:47

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

0
répondu Edmon 2013-07-29 21:26:03

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',))
-1
répondu valk 2018-07-28 18:12:18