我想构建一个工具,其中fstring格式存储在一个配置文件中。
config = load_config()
def build_fstring(str):
return ... # <-- issue is there
chosen_format = config.get("chosen_format") # returns '{k},{v}'
fstring = build_fstring(chosen_format) # may return something like 'f"{k},{v}"'
for (k,v) in d.items():
print(fstring) # fstring is evaluated here
我的问题是,fstring是在已知变量之前编译的。
有办法吗?
发布于 2022-07-26 09:49:32
根据佩普-498的说法,f-字符串的意思是“提供一种将表达式嵌入到字符串文本中的方法”,这意味着f-字符串首先是字符串文字,而试图将变量的值计算为f-string的结果违背了它的目的。
为了使用变量作为字符串格式模板,可以更容易地使用str.format
方法:
k, v = 1, 2
chosen_format = '{k},{v}'
print(chosen_format.format(**locals()))
这一产出如下:
1,2
发布于 2022-07-26 09:31:40
我发现了一个使用eval
的诡计
config = load_config()
chosen_format = config.get("chosen_format") # returns '{k},{v}'
for (k,v) in d.items():
print(eval('f"'+chosen_format+'"'))
但我对代码的简洁性并不十分满意--打印不应该知道如何构建内容--以及对每条记录进行代码评估的性能。
https://stackoverflow.com/questions/73120958
复制相似问题