我正在通过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
......但这不是我要找的。 p> 编辑:评论中注意到"显式"选项是我应寻找的选项。我同意我在这里提出的要求在很多方面都是不安全的。不过,我对是否有办法做到这一点很感兴趣。
答案 0 :(得分:1)
PEP 498说
因为编译器必须参与评估插值字符串中包含的表达式,所以必须有某种方法来表示编译器应该评估哪些字符串。
换句话说,f
会影响解析字符串文字的方式,就像r
一样。因此,您必须调用解析器才能使插值工作。
您希望将数据读入some_string
并将其转换为可以解析为f
字符串的字符串文字。这与想要将数据读入some_lambda_expression
并将其转换为lambda表达式的情况大不相同。当然,您可以使用eval
来执行此操作,因为eval
是一种通过调用解析器将字符串变量的内容转换为代码的方法。我知道那不是你想要的。但是你不能将some_string
解析为f
- 字符串而不用调用解析器,所以你不能拥有你想要的东西。