感谢 David Beazley 的推文,我最近发现新的 Python 3.6 f-strings 也可以嵌套:
>>> price = 478.23
>>> f"{f'${price:0.2f}':*>20s}"
'*************$478.23'
或者:
>>> x = 42
>>> f'''-{f"""*{f"+{f'.{x}.'}+"}*"""}-'''
'-*+.42.+*-'
虽然我很惊讶这是可能的,但我不知道它有多实用,什么时候嵌套 f 弦会有用?这可以涵盖哪些用例?
注意:PEP 本身并没有提到嵌套 f 字符串,但是有一个 特定的测试用例。
原文由 alecxe 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不认为允许嵌套的格式化字符串文字(通过嵌套,我认为它的意思是
f'{f".."}'
)是仔细考虑可能的用例的结果,我更相信它只是为了它们而被允许以符合他们的规范。规范声明它们 支持括号内的完整 Python 表达式*。它还指出,格式化字符串文字 _实际上只是一个在运行时计算的表达式_(参见 此处 和 此处)。因此,只有允许格式化字符串文字作为另一个格式化字符串文字中的表达式才有意义,禁止它会否定对 Python 表达式的完全支持。
您找不到文档中提到的用例(并且只能在测试套件中找到测试用例)的事实是因为这可能是实现的一个很好的(副作用)效果,而不是激励用例。
实际上,有两个例外:不允许空表达式,lambda 表达式必须用显式括号括起来。