目錄
字典「並集」運算子
型別提示的改善
裝飾器語法更加靈活
classmethod 支援包裝其他描述器
新增模組、函式、方法
參考資料
「並集」運算子顧名思義就是給兩個字典取並,並產生新的字典物件。
熟悉 collections 標準庫的開發者聽到這一特性想必很容易聯想到 chainmap,兩者的區別是「並集」運算子會直接產生新的物件,而 chainmap 產生的是與輸入的物件相關聯的檢視——檢視物件或輸入物件的變化都會直接對對方產生影響。
字典「並集」運算子及其相對應的原地運算子的效果如圖:
也許有同學會質疑「並集」運算子的意義,畢竟使用如下的寫法也能相對簡潔地合併字典:
就筆者的理解(且不提上述三種寫法有多少開發者能夠想到),「並集」運算子的優勢在於不會丟失參與合併字典的型別資訊,且對字典鍵的型別沒有要求;
此外,經過簡單測試,「並集」運算子在效能上也更有優勢。
python 3.9 為內建的以及標準庫中的集合型別提供了用於型別提示中的泛型的支援。如:
這一支援解決了一直以來 python **中會出現兩種 list(list 和 typing.list)型別的尷尬情況。需要注意的是,泛型化的內建型別仍然支援例項化,但不能被用於 isinstance 和 issubclass 判斷,這一設計應該 python 社群是結合了**表意性和效能作出的綜合考量:
一種可能的使用場景:annotated 中的型別資訊供 ide 或 **審查工具靜態地檢查變數型別,而附加的資訊則可以在執行時產生更豐富的作用——pep 593 中展示了乙個類似的例子。
檢視pep 593:
舊版本的 python 對裝飾器的語法有所限制,python 3.9 將這一限制放寬——任意「表示式」均可用在裝飾器中。
如果讀者對「任意表示式」這一概念感到模糊,可以參考 if 或 while 語句,在 python 3.9 中,任意可以用在 if 或 while 測試部分的語句都可以成為裝飾器而不會產生語法錯誤。
如下圖所示,甚至匿名函式也可以直接作為裝飾器(雖然圖中的做法毫無意義,在此僅僅為了演示語法特性),在 python 3.8 或之前的版本中,這樣的寫法會引發 syntaxerror。
pep-614 為我們展示了乙個更有實用價值的例子 —— 在編寫 pyqt5 **時為按鈕列表中的每個元素分別註冊事件。
檢視pep 614:
python3.9 中的 classmethod 函式增加了對包裝其他描述器(descriptor)的支援。
如下圖所示,現在我們可以結合 classmethod 和 property 輕鬆創造出乙個類的屬性(在 3.8 及之前的版本中,開發者需要手工實現乙個描述器以支援類似的功能)。
包括且不限於:
1.python.org
2.python enhancement proposals (peps)
3.python documentation
4. ricequant
上文中介紹的特性僅僅是 python 3.9 更新中的冰山一角,想要更全面地了解 python 3.9,您可以:
Python 3 9正式版,新特性提前一睹為快
文章 侵刪 乙個非常優雅的特性,當我們想將兩個字典進行合併時,只需要使用操作符 a b c a b print c 輸出結果 out 不僅如此,我們還可以使用合併更新操作符 直接對原始字典進行更新 a b a b print a 輸出結果 out 這裡需要注意的是,如果兩個字典都包含相同的key,運...
python3 9滾燙出爐
python3.9,千呼萬喚始出來 先來速看下此次發布版本的重點。pep 584,為 dict 增加合併運算子。pep 585,標準多項集中的型別標註泛型。pep 614,放寬對裝飾器的語法限制。pep 616,移除字首和字尾的字串方法。pep 593,靈活的函式和變數標註。新增了 os.pidfd...
Python 3 9安裝與使用
作者標語 天地不仁,以萬物為芻狗 安裝步驟 軟體包中有python的最新安裝包,安裝完成以後再cmd命令中進行執行測試 選擇python 3.9.1.exe的執行檔案安裝python 1.安裝python 3.9.1的執行檔案 2.安裝步驟,作者選用自定義安裝。自定義安裝需要自己新增環境變數,2.1...