Я использую шаблонные строки для создания некоторых файлов, и мне нравится лаконичность новых 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
.) Если вы хотите, чтобы код оценивался позже, вы используете функцию. - person kindall   schedule 28.02.2017.format(**locals())
, хотя и более привлекательный с косметической точки зрения. Пока не будет реализован PEP-501. - person smci   schedule 15.10.2018str.format()
методом, поддерживающим отложенное вычисление, с одной стороны, и более функциональным, чрезвычайно быстрым синтаксисом f-строки, не поддерживающим отложенное вычисление, с другой. Так что нам по-прежнему нужны оба, а в Python по-прежнему нет стандартного средства форматирования строк. Вставить мем стандартов xkcd. - person Cecil Curry   schedule 16.09.2020