En Python, se puede tener variables dentro de la triple cita? Si es así, ¿cómo?

Probablemente se trata de una pregunta muy simple para algunos, pero que me tiene perplejo. Puede utilizar variables dentro de python triple comillas?

En el siguiente ejemplo, cómo hacer uso de las 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 resultado en:

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

Si no ¿cuál es la mejor manera de manejar grandes trozos de texto donde se necesita un par de variables, y hay un montón de texto y caracteres especiales?

InformationsquelleAutor XL. | 2010-10-06

7 Kommentare

  1. 49

    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

    Busque también en el formato de cadena

    • Que es perfecto. Muchas gracias! Que es exactamente lo que estaba buscando! No sé exactamente como python sabe que %s para reemplazar con la variable que, a pesar de que. ¿Se ve en el orden de las variables que aparecen en el siguiente: print mystring % (wash_clothes, clean_dishes)
    • Usted puede tener una mirada en el otro formato, técnica que me había proporcionado el enlace, pero el ejemplo. El ejemplo fue proporcionada por NullUserException. Puede utilizar tanto técnicas.
  2. 58

    La mejor manera de hacer esto es utilizando str.format() más que el método que utiliza %:

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

    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)
    • y const string {, } puede ser escapado como {{, }}.
    • Gracias @LeiYang y @NullUserException!
  3. 14

    ¡Sí! A partir de Python 3.6 puede utilizar el f cadenas para esto: son interpolados en el lugar, por lo que el mystring ya es la salida deseada.

    wash_clothes = 'tuesdays'
    clean_dishes = 'never'
    
    mystring = f"""I like to wash clothes on {wash_clothes}
    I like to clean dishes {clean_dishes}
    """
    
    print(mystring)
    • suena muy bien – ¿hay posibilidad de cambiar el delimitador de llaves «{} » para algo más?
    • no! No en todos.
  4. 8

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

    Sin embargo, pensé que me gustaría mencionar que Python tiene una de la cadena.Plantilla clase de partida en Python2.4.

    He aquí un ejemplo de la documentación.

    >>> 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 me gusta de esto es el uso de una asignación en lugar de argumentos posicionales.

    • Que es un enfoque interesante. En realidad no me gusta los argumentos posicionales como puede llegar a ser difícil si tienes un gran número de variables. La única pregunta que tengo es si este método es que vale la pena si usted tiene cantidades enormes de formato de texto y caracteres especiales en la cadena de plantilla?
    • puede utilizar los argumentos posicionales con format. d = dict(foo=1, bar=2); "{foo} {bar}".format(**d)
    • yup. eso fue sin duda un tipo.
    • string.Template es órdenes de magnitud más lento que otros métodos
  5. 7

    Sí. Yo creo que esto va a funcionar.

    do_stuff = "Tuesday"

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

    EDIT: olvidé una ‘s’ en el especificador de formato.

    • Si vas a la marca de una respuesta, por favor decir por qué, para que todos podamos aprender del error.
    • Esto es ideal para varias variables
  6. 1

    También tenga en cuenta que usted no necesita la variable intermedia:

    name = "Alain"
    print """
    Hello %s
    """ % (name)
  7. 0

    Pasar varios argumentos en forma sencilla

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea