Używam ciągów szablonów do generowania niektórych plików i uwielbiam zwięzłość nowych ciągów f do tego celu, aby zredukować mój poprzedni kod szablonu z czegoś takiego:
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
Teraz mogę to zrobić, bezpośrednio zastępując zmienne:
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
Czasami jednak sensowne jest zdefiniowanie szablonu w innym miejscu - wyżej w kodzie lub zaimportowanie z pliku lub czegoś podobnego. Oznacza to, że szablon jest statycznym ciągiem zawierającym znaczniki formatujące. Coś musiałoby się stać ze stringiem, aby powiedzieć interpreterowi, aby zinterpretował go jako nową f-string, ale nie wiem, czy coś takiego istnieje.
Czy istnieje sposób, aby wprowadzić ciąg i interpretować go jako ciąg f, aby uniknąć używania .format(**locals())
wywołania?
Idealnie chciałbym móc kodować w ten sposób ... (gdzie magic_fstring_function
jest część, której nie rozumiem):
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)
... z tym żądanym wyjściem (bez dwukrotnego odczytu pliku):
The current name is foo
The current name is bar
... ale rzeczywisty wynik, jaki otrzymuję, to:
The current name is {name}
The current name is {name}
f
sznurka.f
Ciąg nie jest dane, a to z pewnością nie jest to ciąg znaków; to jest kod. (Sprawdź to zdis
modułem). Jeśli chcesz, aby kod był oceniany w późniejszym czasie, użyj funkcji.