如何在运行时将字符串转换为格式化的字符串文字?

时间:2018-04-16 08:34:00

标签: python python-3.x f-string

我正在通过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实现的理解是在编译时解释字符串文字(转换为字节代码)。

我知道更多"explicit" option只使用...

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

......但这不是我要找的。 编辑:评论中注意到"显式"选项是我寻找的选项。我同意我在这里提出的要求在很多方面都是不安全的。不过,我对是否有办法做到这一点很感兴趣。

1 个答案:

答案 0 :(得分:1)

PEP 498说

  

因为编译器必须参与评估插值字符串中包含的表达式,所以必须有某种方法来表示编译器应该评估哪些字符串。

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

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