2

我正在努力通过PEP 498。也许我不太了解这个概念,但我怎么可能将常规 Python 字符串转换为格式化的字符串文字并在运行时对其进行评估?


假设你有一个字符串:

some_string = 'Name: {name}'

如果它是格式化的字符串文字,则以下内容将起作用:

name = 'Demo'
some_string_literal = f'Name: {name}'
some_string_literal == 'Name: Demo' # returns True

忽略这是否有意义的问题,我怎么能例如some_string在运行时从文件中读取内容,将其转换为some_string_literal并评估它?我对底层 CPython 实现的理解是字符串文字在编译时被解释(翻译成字节码)。

我知道仅使用...的更“明确”选项

some_string = 'Name: {name}'
some_string.format(name = 'Demo') == 'Name: Demo' # returns True

...但这不是我要找的。


编辑:评论中指出,“显式”选项是我应该寻找的。我同意我在这里提出的问题在很多方面肯定是不安全的。不过,我对是否有办法做到这一点很感兴趣。

4

1 回答 1

1

PEP 498 说

因为编译器必须参与计算内插字符串中包含的表达式,所以必须有某种方法向编译器指示应该计算哪些字符串。

换句话说,就像解析字符串文字的方式f一样。因此,您必须调用解析器才能使插值工作。r

您希望将数据读入some_string并将其转换为可以解析为f-string 的字符串文字。这与想要将数据读入some_lambda_expression并将其转换为 lambda 表达式没有太大区别。当然,您可以使用eval, 因为这eval是一种通过调用解析器将字符串变量的内容转换为代码的方法。我知道那不是你想要的。但是你不能在some_string调用解析器的情况下解析为f-string ,所以你不能拥有你想要的东西。

于 2018-04-17T08:32:04.217 回答