¿Cómo uso Python para expandir fácilmente las variables a cadenas?

¿Qué es un buen lenguaje para hacer esto:

En lugar de: print "%s is a %s %s that %s" % (name, adjective, noun, verb)

Quiero poder hacer algo a los efectos de: print "{name} is a {adjective} {noun} that {verb}"

 "{name} is a {adjective} {noun} that {verb}".format(**locals()) 
  • locals() proporciona una referencia al espacio de nombres actual (como un diccionario).
  • **locals() desempaqueta ese diccionario en argumentos de palabras clave ( f(**{'a': 0, 'b': 1}) es f(a=0, b=1) ).
  • .format() es “el nuevo formato de cadena” , que por cierto puede hacer mucho más (por ejemplo, {0.name} para el atributo de nombre del primer argumento posicional).

Alternativamente, string.template (de nuevo, con los locales si desea evitar un {'name': name, ...} literal redundante).

utilizar string.Template

 >>> from string import Template >>> t = Template("$name is a $adjective $noun that $verb") >>> t.substitute(name="Lionel", adjective="awesome", noun="dude", verb="snores") 'Lionel is a awesome dude that snores' 

Para Python 2 hacer:

 print name,'is a',adjective,noun,'that',verb 

Para Python 3 agregar parens:

 print(name,'is a',adjective,noun,'that',verb) 

Si necesita guardarlo en una cadena, deberá concatenar con el operador + y deberá insertar espacios. print inserta un espacio en todos los campos , menos que haya una coma al final de los parámetros, en cuyo caso renuncia a la nueva línea.

Para guardar en la cadena var:

 result = name+' is a '+adjective+' '+noun+' that '+verb