f-strings在与字典一起使用时表现不佳,详见此处。
以下是一个不太好的示例:
d = {'foo': 'bar'}
# Both work as expected
d["foo"]
d['foo']
# This only works when different quotations are used in the inner and outer strings
f'{d["foo"]}'
f"{d['foo']}"
# This doesn't work
f'{d['foo']}'
f"{d["foo"]}"
# The .format() method doesn't care
'{}'.format(d['foo'])
最后两个f字符串导致
SyntaxError: invalid syntax
,这是因为字符串'{d['foo']}'
被解析为'{d['
foo']}'
。为什么f字符串中花括号内的所有内容不像使用旧的.format()
方法时那样单独被解析,并且实现f字符串的可能原因是什么?我喜欢f字符串,但这似乎是支持旧方法的理由。
'
不表示单引号,你会如何标记字符串的结尾? - Peter Woodformat
的另一个优点是,你可以省略围绕索引键的字符串分隔符,例如'{}'.format(d[foo])
,除非它们包含数字(或是一个数字),尽管这很奇怪。 - Magnus Lind Oxlund