我正在使用模板字符串生成一些文件,为此我喜欢新的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
模块一起检查。)如果希望以后评估代码,请使用一个函数。