嵌套的f弦
感谢David
Beazley的推文,最近我发现新的Python
3.6 f字符串也可以嵌套:
>>> price = 478.23
>>> f"{f'${price:0.2f}':*>20s}"
'*************$478.23'
要么:
>>> x = 42
>>> f'''-{f"""*{f"+{f'.{x}.'}+"}*"""}-'''
'-*+.42.+*-'
让我感到惊讶的是,这种可能性是可行的,但是我却不知道这种实用性如何,何时嵌套f字符串有用?这可以涵盖哪些用例?
注意:PEP本身没有提到嵌套f字符串,但是有一个特定的测试用例。
-
我不认为允许嵌套的格式化字符串文字(通过嵌套,我要指的是
f'{f".."}'
)是仔细考虑可能的用例的结果,我更坚信仅允许它们使用才能使其符合规范。规范指出它们在括号内支持完整的Python
表达式 *。还指出,格式化的字符串文字 实际上只是 在运行时求值 的表达式
(请参阅此处和此处)。结果,只允许将格式化的字符串文字作为表达式放在另一个格式化的字符串文字中是有意义的,因为它会否定对Python表达式的完全支持。您找不到文档中提到的用例的事实(只能在测试套件中找到测试用例)是因为这可能是实现的一个很好的(副作用)效果,而不是激发用例。
实际上,有两个例外:不允许为空表达式,并且lambda表达式必须用显式括号括起来。