2010-10-06 26 views
34

Esta es probablemente una pregunta muy simple para algunos, pero me tiene perplejo. ¿Puedes usar variables dentro de las comillas triples de python?En Python, ¿puede tener variables dentro de comillas triples? ¿Si es así, cómo?

En el siguiente ejemplo, cómo utilizar variables en el texto:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on %wash_clothes 
I like to clean dishes %clean_dishes 
""" 

print(mystring) 

me gustaría que resulta en:

I like to wash clothes on tuesdays 
    I like to clean dishes never 

Si no es así cuál es la mejor manera de manejar grandes trozos de texto donde necesita un par de variables, y hay una tonelada de texto y caracteres especiales?

Respuesta

31

Una de las maneras:

>>> mystring =""" I like to wash clothes on %s 
... I like to clean dishes %s 
... """ 
>>> wash_clothes = 'tuesdays' 
>>> clean_dishes = 'never' 
>>> 
>>> print mystring % (wash_clothes, clean_dishes) 
I like to wash clothes on tuesdays 
I like to clean dishes never 

También se fijan en el formato de cadenas

+0

Eso es perfecto. ¡Muchas gracias! ¡Eso es exactamente lo que estaba buscando! Sin embargo, no entiendo exactamente cómo sabe Python qué% s reemplazará con qué variable. Observa el orden en que aparecen las variables en los siguientes: print mystring% (wash_clothes, clean_dishes) –

+0

@XL: Puede ver la otra técnica de formateo para la que proporcioné el enlace, pero el ejemplo. El ejemplo fue proporcionado por NullUserException.Puedes usar ambas técnicas. – pyfunc

6

Sí. Creo que esto funcionará

do_stuff = "Tuesday"

mystring = """I like to do stuff on %(tue)s""" % {'tue': do_stuff}

EDIT: se olvidó una 's' en el especificador de formato.

+3

Si va a marcar una respuesta, diga por qué, para que todos podamos aprender del error. – jonesy

+1

Esto es ideal para las variables repetidas – AliBZ

42

La forma preferida de hacer esto es usar str.format() más que el método que utiliza %:

Este método de formato de cadena es el nuevo estándar en Python 3.0, y debería ser preferido a la % el formato descrito en Cadena Operaciones de formateo en código nuevo.

Ejemplo:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on {0} 
I like to clean dishes {1} 
""" 

print mystring.format(wash_clothes, clean_dishes) 
8

Creo que la forma más sencilla es str.format() como otros han dicho.

Sin embargo, pensé mencionar que Python tiene una clase string.Template comenzando en Python2.4.

Aquí hay un ejemplo de los documentos.

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 

Una de las razones por las que este tipo es el uso de una cartografía en lugar de argumentos posicionales.

+0

Ese es un enfoque interesante. Realmente tampoco me gustan los argumentos posicionales, ya que puede ser difícil si tienes una gran cantidad de variables. La única pregunta que tengo es si vale la pena este método si tiene cantidades masivas de texto formateado y caracteres especiales en la cadena de la plantilla. –

+2

puede usar argumentos posicionales con 'format'. 'd = dict (foo = 1, bar = 2); "{foo} {bar}". formato (** d) ' – aaronasterling

+0

@martineau. Sip. eso fue definitivamente un tipo. – aaronasterling

1

También tenga en cuenta que no es necesario la variable intermedia:

name = "Alain" 
print """ 
Hello %s 
""" % (name) 
Cuestiones relacionadas