Я использую строки шаблона для генерации некоторых файлов, и мне нравится лаконичность новых 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}
f
строкой.f
Строка не данные, и это, безусловно , не является строка; это код. (Проверьте это с помощьюdis
модуля.) Если вы хотите, чтобы код был оценен позже, вы используете функцию.