掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
在將于 10 月初發(fā)布的 Python 3.12 中,我們將看到 f-strings 語(yǔ)法帶來了一些變化,新版取消了最初制定 f-strings 時(shí)制定的一些限制。經(jīng)過這些變化,使得 f-strings 更加統(tǒng)一,成為一種可以直接整合到解析器中的正式化語(yǔ)法。這將會(huì)為終端用戶和庫(kù)開發(fā)者帶來較大優(yōu)勢(shì),同時(shí)也大大降低用于解析 f-strings 代碼的維護(hù)成本。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了臺(tái)安免費(fèi)建站歡迎大家使用!
最初設(shè)置 f-strings 限制是為了能夠在不修改現(xiàn)有詞法分析器的情況下將 f-strings 的解析實(shí)現(xiàn)到 CPython 中。但目前來看,這些限制反而帶來了復(fù)雜性。比如:
>>> f'Magic wand: { bag['wand'] }'
^
SyntaxError: invalid syntax
>>> f'Magic wand { bag[\'wand\'] } string'
SyntaxError: f-string expression portion cannot include a backslash
>>> f'''A complex trick: {
... bag['bag'] # recursive bags!
... }'''
SyntaxError: f-string expression part cannot include '#'
# Ruby
"#{ "#{1+2}" }"
# JavaScript
`${`${1+2}`}`
# Swift
"\("\(1+2)")"
# C#
$"{$"{1+2}"}"Python 團(tuán)隊(duì)意識(shí)到,從語(yǔ)言用戶的角度來看,這些限制沒有任何意義,所以他們目前通過賦予 f-strings 字面量一個(gè)沒有例外的常規(guī)語(yǔ)法,并使用專用的解析代碼來實(shí)現(xiàn)它,從而消除這些限制。
f-strings 的另一個(gè)問題是,CPython 中的當(dāng)前實(shí)現(xiàn)依賴于將 f-strings 標(biāo)記化為 STRING 令牌,并對(duì)這些令牌進(jìn)行后處理。這帶來了以下問題:
期待新 f-strings 能用得更順心。
具體情況可以查看 PEP-701:https://peps.python.org/pep-0701

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流