0
字幕組雙語原文:Python 3.9有什么新功能?
英語原文:What Are The New Features in Python 3.9?
Python的新版本即將面世?,F(xiàn)在是beta版(3.9.0b3),我們很快就會看到python3.9的完整版本。
一些最新的特性令人興奮,在發(fā)布后使用它們將是令人震驚的。我們將討論以下內(nèi)容:
字典聯(lián)合運算符
類型提示
兩種新的字符串方法
新的Python解析器
這挺酷的,讓我們先來看看這些新特性以及如何使用它們。
字典聯(lián)合
我最喜歡的一個新功能,語法流暢。如果我們有兩個字典a和b需要合并,我們現(xiàn)在使用union運算符。
我們有合并運算符 |:
a = {1: 'a', 2: 'b', 3: 'c'} b = {4: 'd', 5: 'e'} c = a | bprint(c) |
輸出:{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
更新運算法 |=,更新原始字典:
a = {1: 'a', 2: 'b', 3: 'c'} b = {4: 'd', 5: 'e'} a |= bprint(a) |
輸出: {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
如果字典共享一個公鑰,將使用第二個字典的鍵值對:
a = {1: 'a', 2: 'b', 3: 'c', 6: 'in both'} b = {4: 'd', 5: 'e', 6: 'but different'}print(a | b) |
輸出:{1: 'a', 2: 'b', 3: 'c', 6: 'but different', 4: 'd', 5: 'e'}
使用Iterables更新字典
|=運算符的另一個很酷的行為是使用iterable對象(如列表或生成器)用新的鍵值對更新字典:
a = {'a': 'one', 'b': 'two'} b = ((i, i**2) for i in range(3)) a |= bprint(a) |
輸出: {'a': 'one', 'b': 'two', 0: 0, 1: 1, 2: 4}
如果我們用標(biāo)準(zhǔn)的union運算符|嘗試同樣的操作,將輸出TypeError,因為它只允許dict類型之間的聯(lián)合。
類型提示
Python是動態(tài)語言,這意味著我們不需要在代碼中指定數(shù)據(jù)類型。
這是可以的,但有時會令人困惑,而且Python的靈活性突然變得比其他任何東西都麻煩。
從3.5開始,我們可以指定類型,但這相當(dāng)麻煩。這次更新確實改變了這一點,讓我們舉個例子:
無類型提示(左) V 有類型提示(右)
在add_int函數(shù)中,我們想給它添加相同的數(shù)字(出于某種神秘的未定義的原因)。但是我們的編輯器不知道,使用+將兩個字符串添加在一起是完全可以的,因此不會提示警告。
我們現(xiàn)在可以做的是將預(yù)期的輸入類型指定為int。 之后編輯器會立刻報出問題。
我們也可以對包含的類型進(jìn)行詳細(xì)說明,例如:
類型提示用于各處-感謝新語法,看起來更加簡潔:
我們將sum_dict的參數(shù)指定為dict,將返回值指定為int。在測試定義期間,我們還確定了它的類型。
雖然沒有其他新功能那么吸引人,但仍然值得一提,因為它特別有用。添加了兩種用于刪除前綴和后綴的新字符串方法:
"Hello world".removeprefix("He") |
輸出:“l(fā)lo world”
Hello world".removesuffix("ld" |
輸出:“Hello wor”
這是一個看不見的變化,但有可能成為Python未來發(fā)展最重要的變化之一。
Python當(dāng)前使用的主要是基于LL(1)的語法,而該語法又可以由LL(1)解析器進(jìn)行解析,該解析器從上到下,從左至右解析代碼,提前一個標(biāo)記。
我?guī)缀醪恢肋@是如何工作的—但是我可以給您介紹一些由于使用這種方法而導(dǎo)致的Python當(dāng)前的一些問題:
Python包含非LL(1)語法;因此,當(dāng)前語法的某些部分使用了變通方法,造成了不必要的情況復(fù)雜性 。LL(1) 在Python語法中創(chuàng)建限制(沒有可能的解決方法)。此問題強調(diào)以下代碼無法使用當(dāng)前解析器實現(xiàn)(引發(fā)語法錯誤):
with (open("a_really_long_foo") as foo, open("a_really_long_bar") as bar): pass |
LL(1)在解析器中用左遞歸中斷。這意味著特定的遞歸語法會導(dǎo)致解析樹中出現(xiàn)無限循環(huán)。Python的創(chuàng)建者Guido van Rossum解釋道
所有這些因素(還有更多我根本無法理解的因素)對Python有一個主要的影響;它們限制了語言的發(fā)展。
新的基于PEG的解析器將使Python開發(fā)人員具有更大的靈活性,這一點我們將從Python 3.10 onwards 開始注意到。
這就是我們在即將到來的Python3.9中所能期待的一切。如果您真的等不及了,最新的beta版本3.9.0b3 — is available here。
雷鋒字幕組是一個由AI愛好者組成的翻譯團隊,匯聚五五多位志愿者的力量,分享最新的海外AI資訊,交流關(guān)于人工智能技術(shù)領(lǐng)域的行業(yè)轉(zhuǎn)變與技術(shù)創(chuàng)新的見解。
團隊成員有大數(shù)據(jù)專家,算法工程師,圖像處理工程師,產(chǎn)品經(jīng)理,產(chǎn)品運營,IT咨詢?nèi)?,在校師生;志愿者們來自IBM,AVL,Adobe,阿里,百度等知名企業(yè),北大,清華,港大,中科院,南卡羅萊納大學(xué),早稻田大學(xué)等海內(nèi)外高校研究所。
如果,你也是位熱愛分享的AI愛好者。歡迎與雷鋒字幕組一起,學(xué)習(xí)新知,分享成長。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。