python-3.6中带'f'前缀的字符串
问题描述:
我正在尝试Python 3.6。通过新的代码去,我偶然发现了这种新语法:python-3.6中带'f'前缀的字符串
f"My formatting string!"
似乎我们可以做这样的事情:
>>> name = "George"
>>> print(f"My cool string is called {name}.")
My cool string is called George.
任何人都可以揭示这种内部运作的一些光?特别是f-前缀字符串可以使用的变量的作用域是什么?
答
参见PEP 498 Literal String Interpolation:
被从串中提取的表达在所述F-串出现的上下文进行评估。这意味着该表达式可以完全访问本地和全局变量。任何有效的Python表达式都可以使用,包括函数和方法调用。
因此,表达式的评估就好像它们出现在相同的范围内一样;本地人,关闭和全局变量的工作方式与其他代码在相同的上下文中的工作方式相同。
您将在reference documentation找到更多的细节:
表达的格式化字符串文字的处理方式与用括号括常规的Python表达式,也有少数例外。不允许使用空表达式,且
lambda
表达式必须用明确的括号括起来。替换表达式可以包含换行符(例如三重引号字符串),但不能包含注释。每个表达式在格式化字符串文本出现的上下文中按照从左到右的顺序进行评估。
由于您正在尝试使用3.6版本的Alpha版本,请阅读What's New In Python 3.6 documentation。它总结了所有的变化,包括相关文件和PEP的链接。
而只是要说清楚:3.6没有发布还有;第一个字母α预计将在2016年5月之前发布。请参阅3.6 release schedule。
答
f-strings还支持花括号内的任何Python表达式。
print(f"My cool string is called {name.upper()}.")
是否期望f-字符串将回溯到先前版本的python3(如果它们在新代码中发现重用)?无论如何,我无法找到答案,但这似乎是争论的焦点。 –
有没有计划,以支持这一点,没有。 PEP称这是3.6的新功能。 –
谢谢。我试图将它与Enum PEP进行比较,它是新的,但最终回溯到之前的3.x版本,并且我没有看到任何指示计划的任何方法。 –