为什么在 python f 字符串中使用双花括号而不是反斜杠?

Why are double curly braces used instead of backslash in python f-strings?

我们通常使用反斜杠来转义非法字符。

例如,转义双引号。

>>> "\"" == '"'
True

在 f 字符串中,大括号用于占位符。为了表示大括号,大括号加倍。

例如,

>>> f"{{}}" == "{}"
True

为什么在开发 f 弦时这种直观的方法不受青睐?是否有一些技术或设计原因?

>>> f'\{\}'
  File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash

我相信 PEP 536(文字字符串插值的最终语法)谈到了这一点: https://www.python.org/dev/peps/pep-0536/

PEP 的动机部分的一个简短片段是“CPython 中 f-strings 的当前实现依赖于现有的字符串解析机制和对其标记的 post 处理。这导致f-strings 中可能使用的表达式的几个限制:“

有关更多信息,请参阅此 linked email

jsmart 的答案听起来不错,但是 existing f-string implementation 可以 很容易被编写为使用 \{\} 而不是 {{}}。 PEP 536 将解决的限制是不同的,例如如果 ' 用于分隔 f-string 本身,则无法在 f-string 的表达式部分内使用 '

更有可能 f-string 使用 {{}} 不是因为 \{\} 很难实现,而是因为 str.format 在引入 f-string 时已经使用 {{}} 来表示文字大括号,并且 f-string 语法基于 str.format's句法。使用 {{}} 可以更轻松地在 str.format 和 f-string 之间转换。没有令人信服的理由来更改现有的表示法。