Come posticipare/differire la valutazione delle corde f?

| | | | |

Sto usando le stringhe del modello per generare alcuni file e adoro la concisione delle nuove stringhe f per questo scopo, per ridurre il mio codice del modello precedente da qualcosa del genere:

template_a = "Il nome corrente è {name}" names = ["pippo", "bar"] per il nome nei nomi: 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 succedere 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 chiamata .format(**locals())?

Idealmente voglio per essere in grado di codificare in questo modo... (dove magic_fstring_function è dove entra in gioco la parte che non capisco):

template_a = f"Il nome corrente is {name}" # O [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):

Il nome corrente è foo L'attuale name is bar 

...ma l'output effettivo che ottengo è:

Il nome corrente è { nome} Il nome attuale è {nome}