亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3.10中有哪些新特性

發布時間:2021-09-14 17:50:49 來源:億速云 閱讀:140 作者:小新 欄目:開發技術

小編給大家分享一下Python3.10中有哪些新特性,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1、類型注釋的進一步擴展

3.9 版對 Python 中的類型提示和注釋進行了大幅度修改和清理,類型提示這似乎是一種持續的趨勢,在 3.10 中得到進一步擴展,目的很明顯,是為了更好的可讀性,無需看代碼即可得知變量和函數返回值的類型。

延遲類型注釋的執行

類型注釋的運行通常被認為是在函數定義時執行,這意味著類型注釋以自上而下的方式逐行進行檢查。

盡管看起來合乎邏輯,但是這樣做有兩個問題:

  • 1、引用尚未定義的類型的類型提示(前向引用)將不起作用,必須以字符串形式表示。也就是說:假如 int 是自定義類型,我們需要編寫 "int" 而不是編寫 int 。

  • 2、這會減慢模塊導入的速度,因為此時會執行類型提示。

因此,取而代之的是延遲類型注釋,將類型注釋將以字符串形式存儲在__annotations__中,如果需要這些類型注釋可以在運行時通過 typing.get_type_hints() 來解析,也可以通過inspect.signature() 來立即進行解析,這樣的好處是可以先執行模塊導入,允許前向引用,從而減少初始化時間。

新增類型注釋聯合操作符

3.10 通過 "|" 作為邏輯或操作符。在注釋數據類型時,我們可以使用 | 作為或。例如,我們有一個預期為 int 或 float 的變量,可以寫為 int | float ,如下所示:

def f(x: int | float) -> float:
    return x * 3.142
f(1)  # pass
f(1.5)  # pass
f('str')  # linter will show annotation error

也可以使用 typing 模塊提供的關鍵字 Union,比如 Union[int, float]

TypeAlias 注釋

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

但是,將類型寫為字符串會在將這些類型分配給變量時引起問題,因為 Python 會假定我們的字符串文字類型注釋只是一個字符串。

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

MyType = "ClassName"  # ClassName is our type annotation
def foo() -> MyType:
    ...

在這里,我們試圖將其 MyType 用作類型的別名 ,但是, MyType 它將被讀取為字符串值,而不是類型別名。只要 ClassName 在代碼的后面定義,這就是有效的。當前情況下,這將引發注釋錯誤。

為了解決這個問題,添加了一種顯式標識 MyType 為類型別名的方法 :

from typing_extensions import TypeAlias
MyType: TypeAlias = "ClassName"
def foo() -> MyType:
    ...
OR
MyType: TypeAlias = ClassName # if we have defined ClassName already
def foo() -> MyType:
    ...

這里說下,為什么類型很重要,盡管這當然不是一個巨大的變動,但是看到 Python 開發人員加倍努力以增強類型功能,這真是太酷了。Python 的優勢在于其易用性和缺乏陡峭的學習曲線。原因之一是不需要在我們的代碼中顯式定義類型。

增強類型注釋看起來似乎違反直覺,但是為開發人員 提供定義類型的選項 可以極大地提高代碼庫的可讀性和可維護性。例如,從 Python transformers 庫的源代碼中可以看到以下說明:

Even without context, we can read this code and immediately grasp what data we should expect to be fed into these functions, classes, and methods — and exactly which datatypes we should be expecting to return.

In complex code bases (and even simple ones), type annotation can massively improve readability. Simultaneously, not everyone will want (or need) to use them — so an optional, exception-free functionality strikes a perfect balance.

意思是即使沒有上下文,我們也可以閱讀此代碼,并立即掌握應將哪些數據期望輸入到這些函數,類和方法中,以及確切地期望返回哪些數據類型。

但在復雜的代碼庫(甚至簡單的代碼庫)中,類型注釋可以大大提高可讀性。同時,并不是每個人都希望(或需要)使用它們,因此,這是可選的。這種無異常的功能可以達到完美的平衡。

這些改進表明 Python 對類型注釋功能的承諾,基于此,我們最喜歡的庫和我們自己寫的代碼可以大大提示可閱讀性,這會對 Python 生態系統產生長期的正面影響。

2、新增的函數及函數參數的變化

除了類型提示功能的擴展外,核心 Python 功能進行了一些更新,如下。

函數 zip() 增加 strict 參數

函數 zip() 增加 strict 參數,如果設置 strict = True,而傳輸的參數的長度不相等將會拋出異常,如下圖所示:

Python3.10中有哪些新特性

新的 strict 參數不是盲目地截斷不匹配的數據,而是使我們能夠控制它的行為,這將使很多開發人員免于遭受麻煩。

新增整數的位計數器 int.bit_count()

此新方法使我們能夠計算整數的二進制表示形式中 1 的個數,在某些場景下這個函數非常實用且高效。

Python3.10中有哪些新特性

上圖中的結果即為整數以二進制位為 1 的個數:

0   = 00000000
1   = 00000001
2   = 00000010
3   = 00000011
10  = 00001010
11  = 00001011
12  = 00001100
100 = 01100100
101 = 01100101
102 = 01100110

字典的視圖增加一個屬性

字典類型的 3 個方法:dict.items()、dict.keys()、dict.values() 分別返回字典的 3 個視圖,現在每個視圖都增加來一個屬性,叫 mapping,具體用法如下:

Python3.10中有哪些新特性

新的屬性 mapping 的類型屬于 types.MappingProxyType,是圍繞原字典的一個屬性,在任何視圖上訪問 mapping 屬性,都將返回原字典。

現在就這些了,盡管我們距離 3.10 的開發時間表只有幾個月的時間,但已經有很多有趣的更改,Python 的發展仍在繼續,似乎還會為語言添加更多有趣的功能。

以上是“Python3.10中有哪些新特性”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉黎县| 开江县| 庄浪县| 牡丹江市| 句容市| 新闻| 仙游县| 南皮县| 梁平县| 顺平县| 建宁县| 会东县| 乌审旗| 黄浦区| 泌阳县| 城口县| 腾冲县| 雷山县| 岑溪市| 独山县| 孟州市| 弋阳县| 鄄城县| 定南县| 句容市| 嘉义县| 九龙坡区| 平塘县| 梁平县| 金山区| 冀州市| 蒙山县| 张掖市| 利津县| 姚安县| 津市市| 苏尼特左旗| 大埔县| 昌黎县| 成都市| 弥勒县|