Ruby ejemplo:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
La exitosa concatenación de cadenas de Python es aparentemente detallada para mí.
Ruby ejemplo:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
La exitosa concatenación de cadenas de Python es aparentemente detallada para mí.
Respuestas:
Python 3.6 agregará una interpolación de cadena literal similar a la interpolación de cadena de Ruby. A partir de esa versión de Python (que se lanzará a finales de 2016), podrá incluir expresiones en "cadenas f", por ejemplo
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Antes de 3.6, lo más cercano que puede 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 interpolar, el segundo puede tener diferentes tipos, incluyendo un "mapeo", mapeando los nombres de los campos a los valores a ser interpolados. Aquí utilicé el diccionario de variables locales locals()
para asignar el nombre del campo name
a su valor como variable local.
El mismo código que usa el .format()
método 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 string.Template
clase:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
para una cadena y %03d
para un número rellenado con 3 dígitos con ceros a la izquierda. Podría simplemente ser escrito print "%s has %03d" % ("Python", 2)
. Luego, el ejemplo hace uso de poner una clave de mapeo entre paréntesis después de lo %
cual es una forma de dar nombres significativos a los marcadores de posición en lugar de confiar en su orden en la cadena. Luego pasa un diccionario que asigna los nombres clave a sus valores. Es por eso que Sven está utilizando la locals()
función que devuelve un dict que contiene todas sus variables locales para que se name
s
como tipo de conversión: Python puede convertir casi cualquier cosa en una cadena. Pero, por supuesto, perdería las capacidades especiales de formato de otros tipos de conversión.
Desde Python 2.6.X es posible que desee utilizar:
"my {0} string: {1}".format("cool", "Hello there!")
%
operador para la interpolación de cadenas no está en desuso en Python 3.x. docs.python.org/dev/py3k/whatsnew/… anuncia el plan para desaprobar a %
partir de 3.1, pero esto nunca sucedió.
{}
puede eliminarme.
Desarrollé el paquete interpy , que permite la interpolación de cadenas en Python .
Simplemente instálelo a través de pip install interpy
. ¡Y luego, agregue la línea # coding: interpy
al comienzo 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 de printf () de C
Si intentas:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
La etiqueta %s
se reemplazará con la name
variable. Debe echar un vistazo a las etiquetas de función de impresión: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
La interpolación de cadenas se incluirá con 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. :)
También puedes tener esto
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
que se imprimiera. Solo están usando la sintaxis de Ruby.
#
personaje sería impreso.
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 scripts locales, no para registros de producción.
Duplicado:
Para el antiguo Python (probado en 2.4), la mejor solución 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 tu obtienes
d: 1 f: 1.1 s: s
Python 3.6 y posteriores tienen interpolación de cadenas literales usando cadenas f:
name='world'
print(f"Hello {name}!")
name
es una variable local que se encuentra en la cadena, y en Python tienes que pasar explícitamente el diccionario de variables locales al formateador de cadena si quieres que las use.