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

2020-11-28 51CTO

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 對象,用來包裝原始字典。如果在視圖上調用它,則返回原始字典。

【編輯推薦】

【責任編輯:

張燕妮

TEL:(010)68476606】

點讚 0

相關焦點

  • 為Python 3.9 版本添加中文關鍵字 — 寫在草蟒 39x 發布之前
    據稱新解析器的性能與舊解析器大致相當,但 PEG 在設計新語言特性時的形式化比 LL(1) 更靈活,Python 3.10 及之後版本將開始使用這種靈活性。由於採用了新解析器,關鍵字(保留字)的添加(漢化)自然與之前的版本有所不同。下面是詳細步驟和踩坑記錄。
  • Python2 倒計時,還不快來掌握 Python3 酷炫的新特性?|原力計劃
    作者 | 雲爬蟲技術研究筆記責編 | 郭芮出品 | CSDN 博客Python3.8已經發布近一個月了,距離Python3.0第一個版本發布也將超過10年了。相信很多人還是依舊在使用Python2.7版本,想要遷移到最新版本卻不知道怎麼能夠快速掌握其中最Amazing的方法。
  • 5G第二個版本標準Rel-16或延遲3個月發布
    即將凍結的第二個版本5G標準,指明了5G技術的發展方向以及值得關注的新市場。   5G第二個版本標準Rel-16或延遲3個月發布   從1980年左右的第一代移動通信技術,到2020年的第五代移動通信技術,移動通信技術大約每10年就完成一次代際演進。
  • Python 3.8.0來了!
    代表 Python 開發社區和 Python 3.8 發布團隊,我們很高興地宣布 Python 3.8.0 現在已經可以使用。 Python 3.8.0 是 Python 語言的最新正式版,包含許多新功能和優化。 Python 的大多數第三方庫也應該很快就會支持 3.8.0 軟體包。
  • Python2 已終結,入手Python 3,你需要這30個技巧
    使用 Python3如果你關注 Python 的話,應該會知道 Python 2 已經於今年(2020 年)1 月 1 日正式棄用了。這份教程的很多例子都是只支持 Python 3 的,如果你還在用 Python 2.1,那也是時候與時俱進了。2.
  • 詳解Python在資料庫測試中的應用
    對於我們的測試工作而言,Python最吸引我們的特性有如下幾個方面:  1 具備語言粘合劑的能力  2 解釋執行的機制  3 語法簡單易學  4 相對較高的性能  語言粘合劑是比較形象的說法,具體的說,Python支持通過引入自帶的cytpes庫,達到在python腳本中執行已有的動態庫中的代碼的目標。
  • 10 個加速 CSS 開發的框架 - OSCHINA - 中文開源技術交流社區
    Compass 是一個開源的 CSS 製作框架。Switch 是一個全功能的穩定的 CSS 預處理器,基於 Apache 和 mod_python 下運行,也提供命令行處理工具。CSS Preprocessor 採用 PHP5 編寫,有預處理器的常見功能,外,支持 CSS 表達式,如:margin-left: (200px * 3/2 – 10px);
  • 2019年必知的10大頂級Python庫
    我們將討論以下 10 個庫:TensorFlowScikit-LearnNumpyKerasPyTorch2.靈活TensorFlow 的一個非常重要的特性是,它的操作非常靈活。這意味著它具有模塊性,可以讓你把希望獨立出來的部分分出來3.容易訓練對於分布式計算來說,它很容易在 CPU 和 GPU 上訓練。
  • Python已經支持中文變量名啦
    這兩本書分別是《Python編程:從入門到實踐》和《父與子的編程之旅》,它們都是暢銷書,都在 2020 年 10 月出了新版本,都使用 Python3.7+ 版本的語法。然而,在關於變量的命名規則部分,它們犯下了一樣的錯誤,即還在使用 Python2 時代的那套說辭,誤以為命名僅僅支持「字母、數字和下劃線」的組合。
  • Apache SkyWalking(Incubating) 5.0.0-alpha 發布
    之後的4個月,SkyWalking進入了緊張的新版本開發迭代中。從3.x開始,SkyWalking核心團隊展示了自動探針的高性能,拓撲分析,JVM性能收集等多種能力,但是UI和複雜分析依然是短板。5.x版本系列的首次發布,系統迎來了全新的UI和功能特性。現代化的UI,後端複雜的分析能力,展現了從3.x到5.x的跨越,以及技術迭代。
  • 最終的Python 2版本標誌著時代的終結
    對於不願(或無法)升級到版本3的Python用戶,還有另一個動機:python.org發布了Python 2.7.18,這是Python 2的絕對最新正式版本。 儘管在功能方面並沒有增加太多,但它確實是一個裡程碑。
  • python機器學習:常用庫的介紹及安裝
    用Anacond安裝Numpy庫3、代碼編寫是python版本的選擇,python是一個比較特殊的群體,一般語言的各大版本都是向下兼容的,但是python大半本為python3.x的是不兼容python2.x得,所以在寫代碼之前要確認後面的代碼要使用
  • 《小灰教你零基礎學python》-Python入門語言
    這裡手機也是一樣的,手機可以看成縮小版本的電腦,也是有硬體和程序構成,硬體(按鍵、觸控螢幕、攝像頭、耳麥、電池、充電器)加上程序(日期時間、消息提示、微信、qq、騰訊視頻)。Python目前是分成2個大版本,python2 和python3,python是完全免費的,所以不用擔心版權問題,因為python2已經廢棄,所以咱們這套課程完全基於python3。
  • python環境配置簡要流程
    首先明白各個版本對應關係: https://docs.floydhub.com/guides/environments/ 6、創建虛擬環境 同樣在Anconda Prompt環境下,最好保證conda以及pip為最新版本。
  • ghpython_生成球面點
    今天我們來練習ghpython的小案例,繪製球體表面點。
  • 數據分析從業者必看,10 個加速 python 數據分析的簡單的小技巧
    數據科學愛好者 Parul Pandey 在近日發表了一篇博文,分享了在數據科學中非常實用的 10 個小技巧。雷鋒網 AI 科技評論將他的文章編譯整理如下。有時候,一點小小的黑客行為可以節省時間,挽救生命。一個小小的快捷方式或附加組件有時會被證明是天賜之物,並且可以真正提高生產力。所以,下面是我最喜歡的一些技巧,我以本文的形式一起使用和編譯它們。
  • python超聲波傳感_樹莓派超聲波傳感器python - CSDN
    VCC,超聲波模塊電源腳,接5V電源即可Trig,超聲波發送腳,高電平時發送出40KHZ出超聲波Echo,超聲波接收檢測腳,當接收到返回的超聲波時,輸出高電平GND,超聲波模塊GND  1.2 HC-SR04超聲波模塊工作原理:1)採用IO口TRIG觸發測距,給至少10us
  • 教你如何使用Python的27萬代碼庫
    我們限制使用「發行版」一詞是因為它很容易與Linux發行版或其他更重要的軟體版本(如Python本身)混合使用。Ubuntu上如何安裝PIP鑑於Ubuntu 18.04隨附Python 3作為Python的默認安裝,我們可以完成以下步驟為Python 3部署PIP(實際上是pip3)。
  • Vue 3 的最新進展
    Vue.js 作者尤雨溪近日介紹了 Vue 3 的最新進展。因此原本計劃2020年上半年發布 Vue 3,但考慮到目前的進度,不得不進行調整。現在的計劃是7月中旬發布 RC 版本,8月初正式發布 3.0 版本。Vue 3 主要部分的進展Vue 3 CoreVue 3 core 已經處於 beta 階段兩個多月,目前已合併所有計劃中的重大更改 RFC,並且在正式發布之前不會進行進一步的重大變更。
  • 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!
    《高中信息技術 Python編程》 教學案 《第3章 Python 運算符與表達式》3.1.3 比較(關係)運算符!瀏覽器版本過低,暫不支持視頻播放3.1.3、比較(關係)運算符用於對變量或表達式的結果進行大小,真假的比較,返回結果True 、False,通常用在條件語句中作為判斷的依據。