首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态加载f-字符串格式

动态加载f-字符串格式
EN

Stack Overflow用户
提问于 2022-07-26 09:31:40
回答 2查看 63关注 0票数 1

我想构建一个工具,其中fstring格式存储在一个配置文件中。

代码语言:javascript
运行
复制
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是在已知变量之前编译的。

有办法吗?

EN

回答 2

Stack Overflow用户

发布于 2022-07-26 09:49:32

根据佩普-498的说法,f-字符串的意思是“提供一种将表达式嵌入到字符串文本中的方法”,这意味着f-字符串首先是字符串文字,而试图将变量的值计算为f-string的结果违背了它的目的。

为了使用变量作为字符串格式模板,可以更容易地使用str.format方法:

代码语言:javascript
运行
复制
k, v = 1, 2
chosen_format = '{k},{v}'
print(chosen_format.format(**locals()))

这一产出如下:

代码语言:javascript
运行
复制
1,2
票数 4
EN

Stack Overflow用户

发布于 2022-07-26 09:31:40

我发现了一个使用eval的诡计

代码语言:javascript
运行
复制
config = load_config()

chosen_format = config.get("chosen_format")  # returns '{k},{v}'

for (k,v) in d.items():
  print(eval('f"'+chosen_format+'"'))

但我对代码的简洁性并不十分满意--打印不应该知道如何构建内容--以及对每条记录进行代码评估的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73120958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档