Python 改进 f-strings 语法,解除封印,整合到统一的解析器中

1,052次阅读
没有评论

多元共进|2023
Google 开发者大会 精彩演讲回顾
Python 改进 f-strings 语法,解除封印,整合到统一的解析器中

在将于 10 月初发布的 Python 3.12 中,我们将看到 f-strings 语法带来了一些变化,新版取消了最初制定 f-strings 时制定的一些限制。经过这些变化,使得 f-strings 更加统一,成为一种可以直接整合到解析器中的正式化语法。这将会为终端用户和库开发者带来较大优势,同时也大大降低用于解析 f-strings 代码的维护成本。

 Python 改进 f-strings 语法,解除封印,整合到统一的解析器中

最初设置 f-strings 限制是为了能够在不修改现有词法分析器的情况下将 f-strings 的解析实现到 CPython 中。但目前来看,这些限制反而带来了复杂性。比如:

  1. 在表达式部分中,无法使用引号字符来界定 f-strings >>> f'Magic wand: { bag['wand'] }'
    ^
    SyntaxError: invalid syntax
  2. 之前考虑过的一种解决方法会导致在执行的代码中出现转义序列,这在 f-strings 中是被禁止的: >>> f'Magic wand { bag['wand'] } string'
    SyntaxError: f-string expression portion cannot include a backslash
  3. f-strings 中无法使用注释语法: >>> f'''A complex trick: {
    ... bag['bag'] # recursive bags!
    ... }'''
    SyntaxError: f-string expression part cannot include '#'
  4. 许多其它语言表达式字符串插值都支持不扩展转义序列的任意嵌套。比如: # Ruby
    "#{ "#{1+2}" }"

    # JavaScript
    `${`${1+2}`}`

    # Swift
    "("(1+2)")"

    # C#
    $"{$"{1+2}"}"

Python 团队意识到,从语言用户的角度来看,这些限制没有任何意义,所以他们目前通过赋予 f-strings 字面量一个没有例外的常规语法,并使用专用的解析代码来实现它,从而消除这些限制。

f-strings 的另一个问题是,CPython 中的当前实现依赖于将 f-strings 标记化为 STRING 令牌,并对这些令牌进行后处理。这带来了以下问题:

  1. 它给 CPython 解析器增加了相当大的维护成本。这是因为解析代码需要手动编写,这在历史上导致了大量的不一致性和错误。在 C 中手动编写和维护解析代码一直被认为是容易出错和危险的,因为它需要处理大量的原始词法分析器缓冲区上的手动内存管理。
  2. f-strings 解析代码无法使用新的 PEG 解析器所允许的新错误消息机制,这些错误消息带来的改进已经受到了热烈欢迎,但因为 f-strings 用的是独立解析器,所以无法使用上新改进的错误消息机制。另外,因为 f-strings 有几个语法特性可能会因为在表达式部分内部发生的不同隐式标记化而令人困惑(例如 f"{y:=3}" 并不是一个赋值表达式)。
  3. 其它 Python 实现无法知道它们是否正确实现了 f-strings,因为它们并不是官方 Python 语法的一部分。这一点很重要,因为有几个知名的替代实现正在使用 CPython 的 PEG 解析器,如 PyPy。f-strings 使用一个独立的解析器,阻止了这些替代实现利用官方语法,以及从改进的错误消息机制中受益。

期待新 f-strings 能用得更顺心。

具体情况可以查看 PEP-701:https://peps.python.org/pep-0701

Read More 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2023 年 9 月
 123
45678910
11121314151617
18192021222324
252627282930  
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25 鹭羽 2025-12-13 22:37...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...
5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级 思邈 2025-12-10 14:28:37 来源:量子位 让更大规...
商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1 十三 2025-12-15 14:13:14 ...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
读懂2025中国AI走向!公司×产品×人物×方案,最值得关注的都在这里了

读懂2025中国AI走向!公司×产品×人物×方案,最值得关注的都在这里了

读懂2025中国AI走向!公司×产品×人物×方案,最值得关注的都在这里了 衡宇 2025-12-10 12:3...
5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级 思邈 2025-12-10 14:28:37 来源:量子位 让更大规...
戴尔 x OpenCSG,推出⾯向智能初创企业的⼀体化 IT 基础架构解决方案

戴尔 x OpenCSG,推出⾯向智能初创企业的⼀体化 IT 基础架构解决方案

戴尔 x OpenCSG,推出⾯向智能初创企业的⼀体化 IT 基础架构解决方案 十三 2025-12-10 1...
九章云极独揽量子位三项大奖:以“一度算力”重构AI基础设施云格局

九章云极独揽量子位三项大奖:以“一度算力”重构AI基础设施云格局

九章云极独揽量子位三项大奖:以“一度算力”重构AI基础设施云格局 量子位的朋友们 2025-12-10 18:...
乐奇Rokid这一年,一路狂飙不回头

乐奇Rokid这一年,一路狂飙不回头

乐奇Rokid这一年,一路狂飙不回头 梦瑶 2025-12-10 20:41:15 来源:量子位 梦瑶 发自 ...