我正在阅读这篇关于 Python 的新 f-strings 的 博客文章,它们看起来非常简洁。但是,我希望能够从字符串或文件中加载 f 字符串。
我似乎找不到执行此操作的任何字符串方法或其他函数。
来自博文中的示例:
name = 'Fred'
age = 42
f"My name is {name} and I am {age} years old"
'My name is Fred and I am 42 years old'
但是如果我有一个字符串 s
呢?我希望能够 eff-ify s
,像这样:
name = 'Fred'
age = 42
s = "My name is {name} and I am {age} years old"
effify(s)
事实证明,我已经可以执行类似于 str.format
的操作并获得性能提升。即:
format = lambda name, age: f"My name is {name} and I am {age} years old"
format('Ted', 12)
'My name is Ted and I am 12 years old'
原文由 piRSquared 发布,翻译遵循 CC BY-SA 4.0 许可协议
f-strings 是代码。不仅以安全的方式,“字符串文字当然是代码”的方式,而且以危险的、任意代码执行的方式。这是一个有效的 f 字符串:
并且它会在评估时执行任意 shell 命令。
您在询问如何获取从文本文件加载的字符串并将其作为代码进行评估,答案归结为
eval
。这当然是一个 安全风险 并且 可能是一个坏主意,所以我建议不要尝试从文件加载 f-strings。如果你想从文件中加载 f-string
f"My name is {name} and I am {age} years old"
,那么实际上把在文件中,
f
和引号等等。从文件中读取它,编译它并保存它(所以
eval
不必每次都重新编译):并用
eval
评估它:如果这样做,请非常注意加载 f 弦的来源。