虽然f-string十分的便捷,但它并不能完全代替str.format。f-string在表达式出现的上下文中进行求值计算。根据PEP498,这意味着该表达式可以获取所有局部和全局变量。而且该表达式是在运行时计算的表达式。如果在 {
>>> f"{name}"
---------------------------------------------------------------------------
NameError Traceback(most recent call last)
<ipython-input-1-f0acc441190f> in<module>
----> 1 f"{name}"
NameError: name 'name' is not defined
这对 str.format 来说就不是问题,可以提前定义一个模板字符串,并在之后调用.format方法时再传递上下文信息。
>>> s = "{name}"
>>> s.format(name="Python")
'Python'
>>> print(s)
{name}
另外还有个限制是,不能在f-string中使用行内注释。
>>> f"My name is {name #name}!"
File "<ipython-input-37-0ae1738dd871>", line 1
f"My name is {name #name}!"
^
SyntaxError: f-string expression part cannot include '#'