Я використовую рядки шаблонів для генерації деяких файлів, і мені подобається лаконічність нових 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
модуля.) Якщо ви хочете, щоб код був оцінений пізніше, ви використовуєте функцію.