眾所周知,編程語言隔一段時間就會有新的版本發布,今天要介紹的是關于Python的新版本即將發布的信息。現在處于beta(3.9.0b3)中,我們很快將看到Python 3.9 的完整版本。一些最新功能令人難以置信,看到Python 3.9 在發布后會被使用。我們將看到以下新功能,即字典聯合運算符、類型提示、兩種新的字符串方法、新的Python解析器 。下面讓我們首先看一下這些新功能以及我們如何使用這些功能。
詞典聯盟
我最喜歡的新功能之一,具有優美的語法。如果我們有兩個字典a和b需要合并,我們現在使用并運算符。
我們有合并運算符|:
a={1:'a',2:'b',3:'c'}
b={4:'d',5:'e'}
c=a|b
print(c)
[輸出]:{1:“a”,2:“b”,3:“c”,4:“d”,5:“e”}
還有更新運算符|=,它將更新原始字典:
a={1:'a',2:'b',3:'c'}
b={4:'d',5:'e'}
a|=b
print(a)
[輸出]:{1:“a”,2:“b”,3:“c”,4:“d”,5:“e”}
如果我們的詞典共享一個公共鍵,那么將使用第二個詞典中的鍵值對:
a={1:'a',2:'b',3:'c',6:'inboth'}
b={4:'d',5:'e',6:'butdifferent'}
print(a|b)
[輸出]:{1:“a”,2:“b”,3:“c”,6:“但與眾不同”,4:“d”,5:“e”}
使用Iterables進行字典更新
|=運算符的另一個很酷的行為是能夠使用可迭代對象使用新的鍵值對更新字典:
a={'a':'one','b':'two'}
b=((i,i**2)foriinrange(3))
a|=b
print(a)
[輸出]:{'a':'one','b':'two',0:0、1:1、2:4}
如果我們對標準聯合運算符嘗試相同的操作|我們將收到TypeError,因為它將僅允許dict類型之間的并集。
類型提示
Python是動態類型的,這意味著我們無需在代碼中指定數據類型。
沒關系,但有時可能會造成混淆,突然之間,Python的靈活性比其他任何事情都變得更加令人討厭。
從3.5開始,我們可以指定類型,但是非常麻煩。此更新確實改變了這一點,讓我們使用一個示例:
在我們的add_int函數中,我們顯然想為其自身添加相同的數字。但是我們的編輯器并不知道,并且完全可以使用+將兩個字符串加在一起-因此不會發出警告。
現在,我們可以將期望的輸入類型指定為int。使用此功能,我們的編輯人員可以立即了解問題。
我們也可以非常詳細地了解所包含的類型,例如:
類型提示可以在任何地方使用-由于有了新的語法,現在它看起來更加簡潔:
我們將sum_dict的參數指定為dict,并將返回值指定為int。在測試定義期間,我們還將確定其類型。
字符串方法
雖然不像其他新功能那么迷人,但是仍然值得一提,因為它特別有用。添加了兩個用于刪除前綴和后綴的新字符串方法:
"Helloworld".removeprefix("He")
[出]:“llo世界”
Helloworld".removesuffix("ld")
[出]:“你好,我很擔心”
新解析器
這更多是視線之外的更改,但有可能成為Python未來發展中最重大的更改之一。
Python當前使用的主要是基于LL1的語法,而該語法又可以由LL1解析器進行解析,該解析器從上到下,從左至右解析代碼,而前瞻性僅為一個標記。
現在,我幾乎不知道它是如何工作的,但是由于使用了這種方法,因此我可以為您介紹Python中的一些當前問題:
Python包含非LL1語法;因此,當前語法的某些部分使用了變通方法,從而造成了不必要的復雜性。LL1在Python語法中產生了限制。該問題突出表明,以下代碼根本無法使用當前解析器實現:
with(open("a_really_long_foo")asfoo,
open("a_really_long_bar")asbar):
Python
LL1在解析器中以左遞歸中斷。意味著特定的遞歸語法可能導致解析樹中的無限循環。Python的創建者GuidovanRossum解釋說
所有這些因素對Python產生了重大影響。它們限制了語言的發展。
基于PEG的新解析器將為Python開發人員提供更大的靈活性,從Python3.10起我們將開始注意到這一點。
這就是我們即將推出的Python3.9所期待的一切。如果您實在迫不及待,可以在此處獲取最新的Beta版本-3.9.0b3。
上述就是關于Python3.9的新功能是什么的全部內容介紹,想了解更多關于Python的信息,請繼續關注中培偉業。