Python 3.6 agregará literal string interpolation similar a la interpolación de cadenas de Ruby. A partir de esa versión de Python (que está programada para finales de 2016), podrá incluir expresiones en "f-strings", p.
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Antes de 3,6, lo más cerca 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 utilizar para string interpolation en Python. El primer operando es la cadena que se va a interpolar, el segundo puede tener diferentes tipos, incluido un "mapeo", asignando nombres de campo a los valores que se van a interpolar. Aquí utilicé el diccionario de variables locales locals()
para asignar el nombre de campo name
a su valor como una variable local.
El mismo código utilizando el método de las últimas versiones de Python .format()
se vería así:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
También existe la clase string.Template
:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
El problema aquí es que 'name' es una variable local tumbado en la cadena, y en Python que tiene que pasar explícitamente el diccionario de locales variables al formateador de cadenas si desea que las use. – katrielalex
Este no era el problema original, pero gracias. Tu comentario me dio un poco mejor entendimiento del alcance variable (algo con lo que todavía estoy ganando terreno). :) – Caste
¿Qué piensas de este, entonces? http://stackoverflow.com/questions/16504732/how-could-i-make-my-python-string-interpolation-implementation-work-across-impor – SalchiPapa