Я использую строки шаблонов для создания некоторых файлов, и мне очень нравится краткость новых f-строк для этой цели, для сокращения моего предыдущего кода шаблона из чего-то вроде этого:
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
Теперь я могу это сделать, напрямую заменяя переменные:
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
Однако иногда имеет смысл иметь шаблон, определенный в другом месте - выше в коде или импортироваться из файла или что-то в этом роде. Это означает, что шаблон является статической строкой с тегами форматирования. Что-то должно произойти со строкой, чтобы заставить интерпретатор интерпретировать строку как новую f-строку, но я не знаю, есть ли такая вещь.
Есть ли способ привести строку и интерпретировать ее как f-строку, чтобы избежать использования .format(**locals())
?
В идеале я хочу, чтобы иметь возможность кодировать вот так... (где magic_fstring_function
- это то место, где я не понимаю):
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)
... с этим желаемым выходом (без чтения файла дважды):
The current name is foo
The current name is bar
... но фактический результат я получаю:
The current name is {name}
The current name is {name}