再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

Python 3.9這些獨特新功能

引言:

Python 3.9於2020年7月10日發佈。

最新功能令人難以置信。

比如:

字典聯合運算符:

最喜歡的新功能之一,具有優美的語法。如果有兩個字典a並且b需要合併,那麼現在使用並運算符。

類型提示:

使用此工具,我們的編輯人員可以立即瞭解問題。

我們也可以非常詳細地瞭解所包含的類型

兩種新的字符串方法

新的Python解析器 -這非常酷。但有可能成為Python未來發展中最重大的更改之一。

Python 3.9於2020年7月10日發佈。最新功能令人難以置信。本文並不會詳盡列出每項更改,而是列出了下一版對我們來説最有趣和值得注意的事情-開發人員。所以,讓我們開始吧!

類型提示

Python是動態類型的,這意味着我們無需在代碼中指定數據類型。

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

無需在代碼中指定數據類型

沒關係,但是有時可能會造成混淆,突然之間,Python的靈活性比其他任何事情都變得更加令人討厭。

從3.5開始,我們可以指定類型,但是非常麻煩。此更新確實改變了這一點,讓我們使用一個示例:

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

在我們的add_int函數中,我們顯然希望為其自身添加相同的數字(由於某些神秘的未定義原因)。但是我們的編輯器並不知道,並且使用兩個字符串一起添加完全可以,+因此不會發出警告。

現在,我們可以將期望的輸入類型指定為int。使用此工具,我們的編輯人員可以立即瞭解問題。

我們也可以非常詳細地瞭解所包含的類型,例如:

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

類型提示可以在任何地方使用-由於有了新的語法,現在它看起來更加簡潔:

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

新解析器

這更多是視線之外的更改,但有可能成為Python未來發展中最重大的更改之一。

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

新解析器

Python當前使用的主要是基於LL(1)的語法,而該語法又可以由LL(1)解析器進行解析,該解析器從上到下,從左到右地解析代碼,而前瞻性只是一個標記。

現在,我幾乎不知道它是如何工作的,但是由於使用了這種方法,因此我可以向您介紹Python中的一些當前問題:

Python包含非LL(1)語法;因此,當前語法的某些部分使用了變通辦法,從而造成了不必要的複雜性。

LL(1)在Python語法中創建了限制(沒有可能的解決方法)。此問題突出表明,以下代碼根本無法使用當前解析器實現(引發SyntaxError):

with (open("a_really_long_foo") as foo, open("a_really_long_bar") as bar): pass

LL(1)在解析器中以左遞歸中斷。意味着特定的遞歸語法可能導致解析樹中的無限循環。Python的創建者Guido van Rossum在這裏對此進行了解釋。

所有這些因素(以及我根本無法理解的更多因素)對Python產生了重大影響。它們限制了語言的發展。

基於

PEG

的新解析器將為Python開發人員提供更大的靈活性-從Python 3.10起我們將開始注意到這一點。

新的字符串函數

字符串添加了兩個新的便捷功能:

# Remove prefix"someText".removeprefix("some")# "Text"# Remove suffix"someText".removesuffix("Text")# "some"

這兩個函數執行您可以通過使用string[len(prefix):]前綴和string[:-len(suffix)]後綴來實現的功能。這些是非常簡單的操作,因此也是非常簡單的功能,但是考慮到您可能會經常執行這些操作,因此具有內置功能可以很好地滿足您的需求是一件很不錯的事情。

HTTP的狀態代碼

最後但並非最不重要的一點是,實際上…已將HTTP狀態代碼添加到http.HTTPStatus。即,這些是:

import httphttp.HTTPStatus.EARLY_HINTS# <HTTPStatus.EARLY_HINTS: 103>http.HTTPStatus.TOO_EARLY # <HTTPStatus.TOO_EARLY: 425>http.HTTPStatus.IM_A_TEAPOT# <HTTPStatus.IM_A_TEAPOT: 418>

查看這些狀態代碼,我不太明白您為什麼會使用它們。就是説,很高興終於可以讓我成為茶壺狀態代碼。http.HTTPStatus.IM_A_TEAPOT從生產服務器返回此代碼時,我現在可以使用它來改善生活質量(諷刺,請不要這樣做...)。

math新功能

同時,在math模塊中,添加或改進了許多其他功能。從對一個現有功能的改進開始:

import math# Greatest common divisormath.gcd(80, 64, 152)

以前,gcd用於計算最大公約數的函數只能應用於2個數字,從而迫使程序員math.gcd(80, math.gcd(64, 152))在處理更多數字時必須執行類似的操作。從Python 3.9開始,我們可以將其應用於任意數量的值。

math模塊的第一個新增加的math.lcm功能是:

# Least common multiplemath.lcm(4, 8, 5)# 40

math.lcm計算其參數的最小公倍數。與GCD相同,它允許可變數量的參數。

其餘2個新功能密切相關。這些是math.nextafter和math.ulp:

# Next float after 4 going towards 5math.nextafter(4, 5)4.000000000000001# Next float after 9 going towards 0math.nextafter(9, 0)8.999999999999998# Unit in the Last Placemath.ulp(1000000000000000)0.125math.ulp(3.14159265)4.440892098500626e-16

該math.nextafter(x, y)功能是非常簡單-它是後年浮動x朝會y同時考慮到浮點數精度。

在math.ulp另一方面,可能看起來有點怪異...... ULP代表“單位在最後的地方”,它的用作數值計算精確的測量。最簡短的解釋是使用一個示例:

假設我們沒有64位計算機。相反,我們只有3位數字。使用這3位數字,我們可以代表3.14,而不是3.141。使用3.14,我們可以代表的最接近的較大數字是3.15,這2個數字相差1個ULP(最後一個單位),即0.1。因此,math.ulp返回值等於此示例,但是具有計算機的實際精度。

拓撲順序

functools模塊的一部分是下一個有趣的新功能(有點晦澀)。您可以在TopologicalSorter課堂上找到它。此類允許我們使用拓撲順序對圖進行排序。那是什麼?你可能會問。拓撲順序是這樣的順序,其中對於2個節點u和v通過向邊連接uv(從u至v)u之前時v。

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

拓撲順序

在引入此功能之前,您必須自己使用例如Khan的算法或深度優先搜索(不是完全簡單的算法)自己實現。因此,現在,如果需要(例如)對依賴作業進行排序以進行調度,則只需執行以下操作:

from functools import TopologicalSortergraph = {"A": {"D"}, "B": {"D"}, "C": {"E", "H"}, "D": {"F", "G", "H"}, "E": {"G"}}ts = TopologicalSorter(graph)list(ts.static_order())# ['H', 'F', 'G', 'D', 'E', 'A', 'B', 'C']

再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能

在上面的示例中,我們首先使用字典創建圖,其中鍵是傳出節點,值是它們的鄰居集。之後,我們使用圖形創建一個sorter實例,然後調用static_order函數以產生排序。請記住,此順序可能取決於插入的順序,因為當2個節點處於圖形的同一級別時,它們將按照插入順序返回。

新區操作符

最值得注意的新功能可能是新的詞典合併運算符- |或|=。到目前為止,您必須從以下3個選項之一中進行選擇以合併字典:

# Dictionaries to be merged:d1 = {"x": 1, "y": 4, "z": 10}d2 = {"a": 7, "b": 9, "x": 5}# Expected output after merging{'x': 5, 'y': 4, 'z': 10, 'a': 7, 'b': 9}# ^^^^^ Notice that "x" got overridden by value from second dictionary# 1. Optiond = dict(d1, **d2)# 2. Optiond = d1.copy() # Copy the first dictionaryd.update(d2) # Update it "in-place" with second one# 3. Optiond = {**d1, **d2}

結語:

這就是即將推出的Python 3.9所包含的部分獨特新功能。可能並非所有這些更改都與您的日常編程相關,但是我認為至少要注意前2個添加項(|operator和TopologicalSorter)是一件好事,因為它們有時會派上用場。你喜歡嗎?

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 3917 字。

轉載請註明: 再不知道就Out了!趕緊看看新發布的Python 3.9這些獨特新功能 - 楠木軒