Ich verwende Vorlagenzeichenfolgen, um einige Dateien zu generieren, und ich liebe die Prägnanz der neuen F-Zeichenfolgen für diesen Zweck, um meinen vorherigen Vorlagencode von so etwas zu reduzieren:
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
Jetzt kann ich dies tun und Variablen direkt ersetzen:
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
Manchmal ist es jedoch sinnvoll, die Vorlage an einer anderen Stelle zu definieren - weiter oben im Code oder aus einer Datei oder etwas anderem importiert. Dies bedeutet, dass die Vorlage eine statische Zeichenfolge mit Formatierungs-Tags ist. Es müsste etwas mit der Zeichenfolge passieren, um den Interpreter anzuweisen, die Zeichenfolge als neue F-Zeichenfolge zu interpretieren, aber ich weiß nicht, ob es so etwas gibt.
Gibt es eine Möglichkeit, eine Zeichenfolge einzubringen und als F-Zeichenfolge zu interpretieren, um die Verwendung des .format(**locals())
Aufrufs zu vermeiden ?
Idealerweise möchte ich in der Lage sein, so zu codieren ... (wo magic_fstring_function
kommt der Teil ins Spiel, den ich nicht verstehe):
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)
... mit dieser gewünschten Ausgabe (ohne die Datei zweimal zu lesen):
The current name is foo
The current name is bar
... aber die tatsächliche Ausgabe, die ich bekomme, ist:
The current name is {name}
The current name is {name}
.format(**locals())
, obwohl kosmetisch schöner. Bis PEP-501 implementiert ist.
f
String kann man das nicht machen . Einef
Zeichenfolge besteht nicht aus Daten, und es handelt sich sicherlich nicht um eine Zeichenfolge. Es ist Code. (Überprüfen Sie dies mit demdis
Modul.) Wenn Sie möchten, dass Code zu einem späteren Zeitpunkt ausgewertet wird, verwenden Sie eine Funktion.