¿Python hace interpolación de variables similar a “string # {var}” en Ruby?

En Python, es tedioso escribir:

print "foo is" + bar + '.' 

¿Puedo hacer algo como esto en Python?

print "foo is #{bar}."

Python 3.6+ tiene interpolación de variables – anteponga una f a su cadena:

 f"foo is {bar}" 

Para las versiones de Python debajo de esto (Python 2 – 3.5) puede usar str.format para pasar 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 tendrá tiene interpolación de cadenas literales usando f-cadenas :

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

Python 3.6 ha introducido f-strings :

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

Respuesta antigua:

Desde la versión 3.2, Python tiene str.format_map que, junto con locals() o globals() te permite hacerlo rápido:

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

He aprendido la siguiente técnica de Python Essential Reference :

 >>> bar = "baz" >>> print "foo is {bar}.".format(**vars()) foo is baz. 

Esto es bastante útil cuando queremos referirnos a muchas variables en la cadena de formato:

  • No tenemos que repetir de nuevo todas las variables en la lista de argumentos: compárelas con los enfoques basados ​​en argumentos de palabras clave explícitas (como "{x}{y}".format(x=x, y=y) y "%(x)%(y)" % {"x": x, "y": y} ).
  • No tenemos que marcar una por una si el orden de las variables en la lista de argumentos es consistente con su orden en la cadena de formato: compárelo con los enfoques basados ​​en argumentos de posición (como "{}{}".format(x, y) , "{0}{1}".format(x, y) y "%s%s" % (x, y) ).

Formato de cadena

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

Prefiero este enfoque porque no tienes que repetirte haciendo referencia a la variable dos veces:

 alfa = 123
 Imprimir 'La respuesta es {alfa}'. Formato (** locals ())

Hay una gran diferencia entre esto en Ruby:

 print "foo is #{bar}." 

Y estos en Python:

 print "foo is {bar}".format(bar=bar) 

En el ejemplo de Ruby, la bar es evaluada.
En el ejemplo de Python, la bar es solo una clave para el diccionario

En el caso de que solo estés usando variables, el comportamiento es más o menos el mismo, pero en general, convertir Ruby a Python no es tan simple

Si, absolutamente. Python, en mi opinión, tiene un gran soporte para el formato de cadenas, reemplazos y operadores.

Esto podría ser útil:
http://docs.python.org/library/stdtypes.html#string-formatting-operations

Casi todas las otras respuestas no funcionaron para mí. Probablemente es porque estoy en Python3.5. Lo único que funcionó es:

  print("Foobar is %s%s" %('Foo','bar',))