我正在尝试使用Python 3.6。在研究新代码时,我遇到了这个新的语法:
f"My formatting string!"
看起来我们可以像这样做:
>>> name = "George"
>>> print(f"My cool string is called {name}.")
My cool string is called George.
有人能解释一下这个的内部运作原理吗?特别是f前缀字符串可以取到哪些变量的范围?
我正在尝试使用Python 3.6。在研究新代码时,我遇到了这个新的语法:
f"My formatting string!"
看起来我们可以像这样做:
>>> name = "George"
>>> print(f"My cool string is called {name}.")
My cool string is called George.
有人能解释一下这个的内部运作原理吗?特别是f前缀字符串可以取到哪些变量的范围?
从字符串中提取的表达式在出现f-string的上下文中被计算。这意味着该表达式可以完全访问局部变量和全局变量。任何有效的Python表达式都可以使用,包括函数和方法调用。
因此,这些表达式的计算方式就像它们出现在同一个范围内一样;局部变量、闭包和全局变量与上下文中的其他代码一样工作。
您可以在参考文档中找到更多细节:
格式化字符串字面值中的表达式会像带有括号的常规Python表达式一样处理,但有几个例外。不允许空表达式,而且lambda表达式必须用显式括号括起来。替换表达式可以包含换行符(例如三引号字符串),但不能包含注释。每个表达式都在格式化字符串字面值出现的上下文中按从左到右的顺序计算。
由于您正在尝试3.6的alpha版本,请务必阅读Python 3.6版本新功能文档。它总结了所有更改,包括相关文档和PEP的链接。
只是为了明确:3.6还没有正式发布;第一个alpha版预计将在2016年5月发布。请查看3.6版本发布时间表。
f-strings也支持在花括号中放置任何Python表达式。
print(f"My cool string is called {name.upper()}.")
from fstring import fstring
x = 1
y = 2.0
plus_result = "3.0"
print fstring("{x}+{y}={plus_result}")
# Prints: 1+2.0=3.0
在编程中,字母f表示"格式",例如f"hello{somevar}"。在双引号和大括号{}之前加上这个小写字母f可以告诉Python 3,"嘿,这个字符串需要进行格式化。所以把这些变量放进去并格式化它。"
希望这个解释清楚了。