Sto usando stringhe modello per generare alcuni file e adoro la concisione delle nuove stringhe f per questo scopo, per ridurre il mio codice modello precedente da qualcosa di simile:
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
Ora posso farlo, sostituendo direttamente le variabili:
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
Tuttavia, a volte ha senso avere il modello definito altrove, più in alto nel codice o importato da un file o qualcosa del genere. Ciò significa che il modello è una stringa statica con tag di formattazione al suo interno. Dovrebbe accadere qualcosa alla stringa per dire all'interprete di interpretare la stringa come una nuova stringa f, ma non so se esiste una cosa del genere.
C'è un modo per inserire una stringa e interpretarla come una stringa f per evitare di usare la .format(**locals())
chiamata?
Idealmente voglio essere in grado di codificare in questo modo ... (dov'è magic_fstring_function
dove entra la parte che non capisco):
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 questo output desiderato (senza leggere il file due volte):
The current name is foo
The current name is bar
... ma l'output effettivo che ottengo è:
The current name is {name}
The current name is {name}
f
stringa. Unaf
stringa non è un dato e certamente non è una stringa; è codice. (Controllalo con ildis
modulo.) Se vuoi che il codice venga valutato in un secondo momento, usa una funzione.