Python3.10第二個alpha版本!最新特性值得關注

2020-12-22 機器之心Pro

選自towardsdatascience

作者:James Briggs

機器之心編譯

編輯:陳萍

Python3.10 的第二個 alpha 版本已在 11 月初發布,相比於不久前發布的 3.9 版本,新版本對類型注釋擴展、zip、位計數、字典映射又有了新的改進。

Python3.9 剛剛發布不久,Python3.10 的第二個 alpha 版本也已於 11 月初發布。透過這個版本,我們或許可以一窺 Python 的未來改變。

Python3.10 第二個 alpha 版本的新功能包括以下三大部分:

類型注釋擴展

為什麼類型注釋很重要

新方法和行為

類型注釋擴展

Python3.9 版本對類型提示與注釋進行了徹底的修改和清理。Python3.10 版本似乎延續了這一趨勢,Python3.10 alpha 2 版本將類型注釋功能進行了擴展。

從 Python 3.0 到 Python 3.10 類型注釋的變化。

類型注釋的延遲評估

類型注釋的評估始終在函數定義時執行,這意味著類型注釋以自上而下的方式逐行進行評估。這看似合乎邏輯,但存在兩個問題:

引用尚未定義的類型(前向引用)的類型提示無效,必須以字符串形式表示。例如應該是「「int」」而不是「int」(儘管這僅適用於自定義類型,而不是內置 / 預定義類型)。

由於需要執行類型提示,模塊導入的速度減慢。

因此,注釋將被存儲在 __annotations__,然後進行集中評估,即允許前向引用並首先執行模塊導入(以減少初始化時間)。

Union 操作符類型

Python 3.10 引入了 | 操作符。在注釋數據類型時,可以使用 | 作為 OR。例如,存在一個預計為 int 或 float 的變量,我們可以將其寫作 int | float:

在 3.10 之前的版本中,等效運算符使用 type.Union 方法進行編寫,例如 Union[int, float]。

TypeAlias 注釋

回到前向引用問題,避免前向引用的常見解決方案是將它們作為字符串寫入。

但是,將類型作為字符串編寫,會在將這些類型分配給變量時出現問題,因為 Python 假設字符串文本類型注釋只是一個字符串。

在使用類型注釋的地方使用該類型注釋變量將返回錯誤。例如:

我們正在嘗試使用 MyType 作為類型的別名(alias),但是 MyType 將被讀取為字符串值,而不是類型別名。

只要在後面的代碼中定義了 ClassName,這就是有效的。目前,這將引發注釋錯誤。

為了解決這個問題,該版本添加了一個顯式地將 MyType 識別為類型別名的方法:

為什麼類型注釋很重要

Python 的強大之處在於它易於使用和掌握,原因之一就是我們不需要在整個代碼中顯式地定義類型。

這看似違背常理,但允許開發人員定義類型可以極大地增強代碼庫的可讀性和可維護性。例如從 transformers 庫的原始碼中提取如下內容:

即使沒有上下文,我們也可以讀取這些代碼,並了解應該向這些函數、類和方法提供哪些數據,以及應該返回哪些數據類型。

在複雜的代碼庫(甚至是簡單的代碼庫)中,類型注釋可以極大地提高可讀性。同時,並不是每個開發者都想(或需要)使用類型注釋,因此可選的、無異常的功能可以達到完美的平衡。

新方法和實現

除了類型注釋方面的更改之外,3.10 alpha 2 版本對其他核心功能也進行了一些更新。

為 Zip 添加等長標記

第一個是 PEP 618,它為 zip() 函數添加了一個可選的 strict 標記。設置 strict = True,如果 zip 的兩個輸入長度不等,則會引發錯誤。

左側無 strict=True 標記,沒有引發錯誤,並且較長的列表被截斷用於創建壓縮生成器。如果設置 strict = True,就會引發錯誤。

整數的位計數

也叫做「總體計數」(population count)。這一新方法允許計算整數二進位表示中 1 的個數,只需寫 int.bit_count() 即可:

字典視圖映射

三種字典方法 dict.keys()、dict.values() 和 dict.items() 返回字典的不同視圖。現在,將 mapping 屬性添加到每個視圖對象。

這一新屬性是 types.MappingProxyType 對象,用來包裝原始字典。如果在視圖上調用它,則返回原始字典。

https://towardsdatascience.com/new-features-in-python-3-10-66ac05e62fc7

相關焦點

  • Python 3.9來了!這十個新特性值得關注
    Python 3.9 已於 10 月 5 日發布,新版本的特性,你 get 到了嗎?對於 Python 程式設計師來說,這又是一個令人興奮的時刻。 相比於之前的版本,Python 3.9 有哪些值得討論的功能呢?
  • python教程:3個非常有用的內置函數
    *版本中是直接返回list的,但在python3.同filter一樣,在python2.*版本中是直接返回list的,但在python3.*中是返回一個迭代器 3、reduce 語法:reduce(function,iterable) 解釋:把迭代器通過function進行累積計算 用法:function必須包含倆個參數,第一個參數表示初始值,第二個參數表示迭代器的每個元素,如下:
  • 《小灰教你零基礎學python》-Python入門語言
    這裡手機也是一樣的,手機可以看成縮小版本的電腦,也是有硬體和程序構成,硬體(按鍵、觸控螢幕、攝像頭、耳麥、電池、充電器)加上程序(日期時間、消息提示、微信、qq、騰訊視頻)。Python目前是分成2個大版本,python2 和python3,python是完全免費的,所以不用擔心版權問題,因為python2已經廢棄,所以咱們這套課程完全基於python3。
  • OpenStack Ussuri只支持Python3,你該怎麼辦?
    OpenStackTrain(2019年10月):默認Python3在OpenStackTrain發行版(2019年10月)中,OpenStack默認在Python3上測試。這意味著你可以滿懷信心地將雲升級到Python3環境。OpenStackTrain發布時支持經過測試的Python3,但仍然支持Python2.7。
  • Python真的值得學習嗎
    1991年初python公布了第一個公開發行版本。由於它是用C語言實現的,所以從一出生,Python已經具有了:類,函數,以及以模塊為基礎的拓展系統等。 尤其是2017年人工智慧概念的興起,python的關注度也是越來越高。儘管目前它仍然無法和java等程式語言抗衡,但隨著未來人工智慧權重的提高,掌握python也就成為一種必然。它的開發效率比 C, Java 高很多,很多的創業公司當初為了把想法快速變成現實產品從而獲得投資資金,首選 Python作為開發語言。這估計也是當年推動python流行起來的另一個原因吧。
  • 如何安裝python3
    如何安裝python3首先找到python的官網: https://www.python.org/然後點擊Download然後選擇對應的版本,這裡選擇的是windows>跳轉到對應的界面以後,選擇python3.5版本,64位下載即可下載完成以後有一個.exe的可執行文件雙擊這個可執行文件,然後進行選擇安裝。
  • Python學習步驟
    【基礎篇】Python基礎 【提高篇】Python深入和擴展【擴展篇】網絡編程、多線程、擴展庫【高手篇】算法、Python源碼、函數式編程、手工實現神經網絡第一階段python開發基礎和核心特性>1.變量及運算符2.分支及循環3.循環及字符串4.列表及嵌套列表5.字典及項目練習6.函數的使用7.遞歸及文件處理8.文件9.面向對象10.設計模式及異常處理11.異常及模塊的使用12.坦克大戰13.核心編程14.高級特性15.內存管理第二階段資料庫和linux基礎1.並發編程2.網絡通信3.
  • python環境配置簡要流程
    首先明白各個版本對應關係: https://docs.floydhub.com/guides/environments/ 6、創建虛擬環境 同樣在Anconda Prompt環境下,最好保證conda以及pip為最新版本。
  • 我的世界:pe版11個古老的特性!老版本的史蒂夫,受傷會「啊~」
    可能說起mc古老的特性,很多人會提到拉娜、Indev房子、原始的史蒂夫人類等等。但其實說這些都很空,畢竟2009年那個年代,有多少人真的玩過遠古版的JAVA版《我的世界》呢?對於國內大多數玩家而言,其實保留最早的是對《我的世界》PE版本的記憶。如這般經典的開始界面。
  • Python最佳經典學習路線
    如何學習Python python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例) (1)Python3入門,數據類型,字符串 (2)判斷/循環語句,函數,
  • HanLP 2.0.0-alpha.0發布 2.0帶來一系列新特性
    HanLP 2.0.0-alpha.0 發布了。HanLP 是由一系列模型與算法組成的 Java 工具包,目標是普及自然語言處理在生產環境中的應用。HanLP 具備功能完善、性能高效、架構清晰、語料時新、可自定義的特點。
  • 優麒麟 20.10 版本發布--簡而美,華而實
    20.10 是優麒麟發布的第 16 個版本,提供 9 個月的技術支持,與 Ubuntu 20.10、Lubuntu 20.10、Xubuntu 20.10、Ubuntu Mate 20.10 等開源發行版全球同步發布。
  • 電商運營數據python - CSDN
    英國某電商運營數據和CRM分析(python-pandas&plt,附代碼及原數據)基於電商網站交易記錄,使用python對網站一年內運營情況,客戶地區分布,客戶價值及活躍度進行分析,並基於分析結果為網站發展戰略提出建議。
  • Python實ai現五子棋人機對戰
    開發工具Python版本:3.6.4相關模塊:graphics模塊。環境搭建安裝Python並添加到環境變量即可。註:graphics模塊在相關文件中已經提供,就是一個py文件,直接放在當前路徑或者放到python安裝文件夾下的site-packages文件夾內均可。原理簡介對於五子棋這樣的博弈類AI,很自然的想法就是讓計算機把當前所有可能的情況都嘗試一遍,找到最優的落子點。
  • 騎士3技能特性激活,最新版本「獨孤求敗」
    距離《元氣騎士》2.8.0版本更新已經有數天時間了,想必此時的小夥伴們,也已對元氣地牢中產生的變化有了基礎的了解,可是不知大家具體對遊戲中的哪個環節更感興趣呢?是「夢想成真」的隱藏關卡,還是少女心萌動的童話皮膚,或者是全新的背景音樂,再者是老宅最感興趣的最新職業技能呢。
  • Python和Java語言,新手應該先學哪個
    從這就能看出java這門語言深得人心,是見過世面的程式語言,這麼多年,什麼風雨都經歷過,從網際網路草莽時代,憑藉一己之力,為網際網路推向全宇宙做出了不可磨滅的貢獻,到了移動網際網路時代,Android的興起,讓java又活出了第二個生命,羨煞旁人。再到大數據時代,java又毫無懸念的霸屏了,Hadoop的技術圈裡,java始終是焦點。以上就足以讓你選擇java了。
  • 優麒麟20.10版本發布 - 簡而美,華而實
    Kylin)開源作業系統 20.10 版本(代號Groovy Gorilla)正式發布。20.10 是優麒麟發布的第 16 個版本,提供 9 個月的技術支持,與 Ubuntu 20.10、Lubuntu 20.10、Xubuntu 20.10、Ubuntu Mate 20.10 等開源發行版全球同步發布。
  • 10 個平板電腦上的 Python 編輯器
    本文介紹 10 個可在 iOS 或 Android 平板電腦上的 Python 編程環境。Python 開發者可通過這些工具實現隨時隨地編碼,蛋疼抑或爽極?
  • python test檢驗 - CSDN
    當然可以拿個Excel表把數據畫個圖,然後找一堆人來投票,看覺得差不多還是覺得差得多的人哪方票數高。但終歸這種做法有些主觀,不夠說明力。概率統計給出了一種更為客觀的基於統計的方法,這裡是一個Python的實現:#!
  • python教程之python數學運算
    存儲數據變量#兩個變量交換值,通過第三個參數實現print('兩個變量交換值,通過第三個參數實現'); #第一種方法是通過第三個參數實現x=5;#變量賦值y=11; #變量賦值中進行分數(fraction)運算分數運算是python中的一個模塊(module)。