为什么在python fstring中使用双大括号而不是反斜杠?

2024-05-16 01:07:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,转义双引号

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

在f字串中,花括号用于放置。要表示卷曲大括号,大括号将加倍

比如说,

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

为什么在开发f字符串时不支持这种直观的方法?是否有技术或设计方面的原因

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

Tags: 方法字符串truestdin原因大括号字符直观
2条回答

jsmart的答案听起来不错,但是existing f-string implementation可以相当容易地编写成使用\{\}而不是{{}}。PEP 536将解决的限制是不同的,例如如果使用'来限定f字符串本身,则无法在f字符串的表达式部分中使用'

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

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

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

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

相关问题 更多 >