print examples python string-interpolation language-comparisons

examples - python string format



¿Hay un Python equivalente a la interpolación de cuerdas de Ruby? (8)

Ejemplo de rubí:

name = "Spongebob Squarepants" puts "Who lives in a Pineapple under the sea? /n#{name}."

La exitosa concatenación de cuerdas de Python es aparentemente detallada para mí.


Desde Python 2.6.X es posible que desee utilizar:

"my {0} string: {1}".format("cool", "Hello there!")


He desarrollado el paquete interpy , que permite la interpolación de cadenas en Python .

Solo instálalo a través de pip install interpy . Y luego, agregue la línea # coding: interpy al principio de sus archivos!

Ejemplo:

#!/usr/bin/env python # coding: interpy name = "Spongebob Squarepants" print "Who lives in a Pineapple under the sea? /n#{name}."


La interpolación de cadenas de Python es similar a la printf () de C

Si intentas:

name = "SpongeBob Squarepants" print "Who lives in a Pineapple under the sea? %s" % name

La etiqueta %s será reemplazada con la variable de name . Debería echar un vistazo a las etiquetas de función de impresión: http://docs.python.org/library/functions.html


La interpolación de cadenas se incluirá en Python 3.6 como se especifica en PEP 498 . Podrás hacer esto:

name = ''Spongebob Squarepants'' print(f''Who lives in a Pineapple under the sea? /n{name}'')

Tenga en cuenta que odio a Bob Esponja, por lo que escribir esto fue un poco doloroso. :)


Para el antiguo Python (probado en 2.4), la solución superior señala el camino. Puedes hacerlo:

import string def try_interp(): d = 1 f = 1.1 s = "s" print string.Template("d: $d f: $f s: $s").substitute(**locals()) try_interp()

Y te dan

d: 1 f: 1.1 s: s


Python 3.6 agregará interpolación de cadena literal similar a la interpolación de cadena de Ruby. A partir de esa versión de Python (que está programada para ser lanzada a finales de 2016), podrá incluir expresiones en "f-strings", por ejemplo

name = "Spongebob Squarepants" print(f"Who lives in a Pineapple under the sea? {name}.")

Antes de 3.6, lo más cerca que puedes llegar a esto es

name = "Spongebob Squarepants" print("Who lives in a Pineapple under the sea? %(name)s." % locals())

El operador % se puede usar para la interpolación de cadenas en Python. El primer operando es la cadena a ser interpolada, el segundo puede tener diferentes tipos, incluyendo un "mapeo", mapeando los nombres de los campos a los valores a interpolar. Aquí utilicé el diccionario de variables locals() para asignar el nombre del campo a su valor como una variable local.

El mismo código que usa el método .format() de las versiones recientes de Python se vería así:

name = "Spongebob Squarepants" print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))

También está la clase string.Template :

tmpl = string.Template("Who lives in a Pineapple under the sea? $name.") print(tmpl.substitute(name="Spongebob Squarepants"))



import inspect def s(template, **kwargs): "Usage: s(string, **locals())" if not kwargs: frame = inspect.currentframe() try: kwargs = frame.f_back.f_locals finally: del frame if not kwargs: kwargs = globals() return template.format(**kwargs)

Uso:

a = 123 s(''{a}'', locals()) # print ''123'' s(''{a}'') # it is equal to the above statement: print ''123'' s(''{b}'') # raise an KeyError: b variable not found

PD: el rendimiento puede ser un problema. Esto es útil para los scripts locales, no para los registros de producción.

Duplicado