Estoy usando cadenas de plantilla para generar algunos archivos y me encanta la concisión de las nuevas cadenas f para este propósito, para reducir mi código de plantilla anterior de algo como esto:
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
Ahora puedo hacer esto, reemplazando directamente las variables:
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
Sin embargo, a veces tiene sentido tener la plantilla definida en otro lugar, más arriba en el código, o importada de un archivo o algo. Esto significa que la plantilla es una cadena estática con etiquetas de formato. Algo tendría que sucederle a la cadena para decirle al intérprete que interprete la cadena como una nueva cadena f, pero no sé si existe tal cosa.
¿Hay alguna forma de introducir una cadena e interpretarla como una cadena f para evitar usar la .format(**locals())
llamada?
Idealmente, quiero poder codificar así ... (donde magic_fstring_function
es donde entra la parte que no entiendo):
template_a = f"The current name is {name}"
# OR [Ideal2] template_a = magic_fstring_function(open('template.txt').read())
names = ["foo", "bar"]
for name in names:
print (template_a)
... con esta salida deseada (sin leer el archivo dos veces):
The current name is foo
The current name is bar
... pero la salida real que obtengo es:
The current name is {name}
The current name is {name}
f
cuerda. Unaf
cadena no es datos y ciertamente no es una cadena; es código. (Compruébelo con eldis
módulo). Si desea que el código se evalúe más adelante, utilice una función.