偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python 改進(jìn) f-strings 語(yǔ)法,解除封印,整合到統(tǒng)一的解析器中

開(kāi)發(fā) 前端
Python 團(tuán)隊(duì)意識(shí)到,從語(yǔ)言用戶的角度來(lái)看,這些限制沒(méi)有任何意義,所以他們目前通過(guò)賦予 f-strings 字面量一個(gè)沒(méi)有例外的常規(guī)語(yǔ)法,并使用專用的解析代碼來(lái)實(shí)現(xiàn)它,從而消除這些限制。

在將于 10 月初發(fā)布的 Python 3.12 中,我們將看到 f-strings 語(yǔ)法帶來(lái)了一些變化,新版取消了最初制定 f-strings 時(shí)制定的一些限制。經(jīng)過(guò)這些變化,使得 f-strings 更加統(tǒng)一,成為一種可以直接整合到解析器中的正式化語(yǔ)法。這將會(huì)為終端用戶和庫(kù)開(kāi)發(fā)者帶來(lái)較大優(yōu)勢(shì),同時(shí)也大大降低用于解析 f-strings 代碼的維護(hù)成本。

最初設(shè)置 f-strings 限制是為了能夠在不修改現(xiàn)有詞法分析器的情況下將 f-strings 的解析實(shí)現(xiàn)到 CPython 中。但目前來(lái)看,這些限制反而帶來(lái)了復(fù)雜性。比如:

  1. 在表達(dá)式部分中,無(wú)法使用引號(hào)字符來(lái)界定 f-strings
>>> f'Magic wand: { bag['wand'] }'
                             ^
SyntaxError: invalid syntax
  1. 之前考慮過(guò)的一種解決方法會(huì)導(dǎo)致在執(zhí)行的代碼中出現(xiàn)轉(zhuǎn)義序列,這在 f-strings 中是被禁止的:
>>> f'Magic wand { bag[\'wand\'] } string'
SyntaxError: f-string expression portion cannot include a backslash
  1. f-strings 中無(wú)法使用注釋語(yǔ)法:
>>> f'''A complex trick: {
... bag['bag']  # recursive bags!
... }'''
SyntaxError: f-string expression part cannot include '#'
  1. 許多其它語(yǔ)言表達(dá)式字符串插值都支持不擴(kuò)展轉(zhuǎn)義序列的任意嵌套。比如:
# Ruby
"#{ "#{1+2}" }"

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

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

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

Python 團(tuán)隊(duì)意識(shí)到,從語(yǔ)言用戶的角度來(lái)看,這些限制沒(méi)有任何意義,所以他們目前通過(guò)賦予 f-strings 字面量一個(gè)沒(méi)有例外的常規(guī)語(yǔ)法,并使用專用的解析代碼來(lái)實(shí)現(xiàn)它,從而消除這些限制。

f-strings 的另一個(gè)問(wèn)題是,CPython 中的當(dāng)前實(shí)現(xiàn)依賴于將 f-strings 標(biāo)記化為 STRING 令牌,并對(duì)這些令牌進(jìn)行后處理。這帶來(lái)了以下問(wèn)題:

  1. 它給 CPython 解析器增加了相當(dāng)大的維護(hù)成本。這是因?yàn)榻馕龃a需要手動(dòng)編寫,這在歷史上導(dǎo)致了大量的不一致性和錯(cuò)誤。在 C 中手動(dòng)編寫和維護(hù)解析代碼一直被認(rèn)為是容易出錯(cuò)和危險(xiǎn)的,因?yàn)樗枰幚泶罅康脑荚~法分析器緩沖區(qū)上的手動(dòng)內(nèi)存管理。
  2. f-strings 解析代碼無(wú)法使用新的 PEG 解析器所允許的新錯(cuò)誤消息機(jī)制,這些錯(cuò)誤消息帶來(lái)的改進(jìn)已經(jīng)受到了熱烈歡迎,但因?yàn)?f-strings 用的是獨(dú)立解析器,所以無(wú)法使用上新改進(jìn)的錯(cuò)誤消息機(jī)制。另外,因?yàn)?f-strings 有幾個(gè)語(yǔ)法特性可能會(huì)因?yàn)樵诒磉_(dá)式部分內(nèi)部發(fā)生的不同隱式標(biāo)記化而令人困惑(例如 f"{y:=3}" 并不是一個(gè)賦值表達(dá)式)。
  3. 其它 Python 實(shí)現(xiàn)無(wú)法知道它們是否正確實(shí)現(xiàn)了 f-strings,因?yàn)樗鼈儾⒉皇枪俜?Python 語(yǔ)法的一部分。這一點(diǎn)很重要,因?yàn)橛袔讉€(gè)知名的替代實(shí)現(xiàn)正在使用 CPython 的 PEG 解析器,如 PyPy。f-strings 使用一個(gè)獨(dú)立的解析器,阻止了這些替代實(shí)現(xiàn)利用官方語(yǔ)法,以及從改進(jìn)的錯(cuò)誤消息機(jī)制中受益。

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

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

責(zé)任編輯:武曉燕 來(lái)源: OSCHINA
相關(guān)推薦

2021-10-19 06:58:57

Python格式化f-strings

2022-02-15 16:51:57

Pythonf-strings字符串

2021-12-09 15:25:15

Pythonf-strings字符串

2023-02-10 08:13:56

Pythonf-strings

2023-03-24 16:11:02

2019-09-03 16:00:30

戴爾

2010-02-22 16:51:03

Python 解析器

2010-02-22 13:38:50

Python解析器

2025-03-05 11:23:44

2011-02-24 13:52:46

Opera 11HTML5

2011-07-01 13:46:55

服務(wù)器整合

2022-10-20 11:00:52

SQL解析器

2009-03-19 09:26:05

RSS解析器MagpieRSS

2014-05-15 09:45:58

Python解析器

2023-12-30 13:33:36

Python解析器JSON

2014-05-06 09:27:54

2022-02-14 13:58:32

操作系統(tǒng)JSON格式鴻蒙

2021-03-16 10:39:29

SpringBoot參數(shù)解析器

2019-07-05 08:39:39

GoSQL解析器

2011-07-06 15:44:26

iPhone XCode Leopard
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)