为什么在 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 之间转换。没有令人信服的理由来更改现有的表示法。
我们通常使用反斜杠来转义非法字符。
例如,转义双引号。
>>> "\"" == '"'
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 之间转换。没有令人信服的理由来更改现有的表示法。