本文約1700字,建議閱讀5分鐘
本文為大家介紹了新版本Python的新特性。
圖片來源:Canva——由Varun Singh編輯
我們都知道Python已經流行很長時間了。作為一名Python開發人員,我很高興與大家分享Python在每一個新版本中不斷得到的更新和改進。Python的最新版本3.10有一些重大改進,接下來我將介紹與這個新版本的Python一起發布的最重大的五項更新。這裡很重要。對於Python開發者來說,當你編碼時遇到了錯誤,錯誤信息可以幫助你找出代碼中的問題。與以前的Python版本相比,改進後的錯誤信息可以讓這個過程更加輕鬆。# I am coding in Python and this is first line ;)my_list = ["Hello", "Python!"print(my_list)在以前的版本——Python3.9和更早的版本中,你會看到如下的報錯——File "my_precious.py", line 3 print(my_list) ^SyntaxError: invalid syntax嗯,無效的語法!現在,作為一個開發者,從這條錯誤消息中你能理解到什麼?就我個人而言,除了在第3行的某個地方添加了一個錯誤的語法之外,沒有任何其他信息。在這種情況下,Python 3.10憑藉其最新的更新成為了我的救世主。對於同一段代碼,Python 3.10將拋出以下錯誤信息——File "my_precious.py", line 2 news = ["Hello", "Python!" ^SyntaxError: '[' was never closed哦吼!行號和非常具體的錯誤信息讓我直接找到並修復錯誤,繼續編程!這裡還有我嘗試的另一個例子,看看錯誤信息是否足夠清晰——# missing_comma.pydc_characters = { 1: "Superman" # Comma missing 2: "Batman", 3: "Joker"}....Output:File "dc_characters.py", line 4 10: "October" ^^^^^^^^^SyntaxError: invalid syntax. Perhaps you forgot a comma?這真的是Python 3.10版本中一個很酷的更新,你可以在評論區留言分享你的想法。typing模塊,用於增加靜態類型到Python。在過去的 Python 版本中,更多的工具已從typing轉換為內置功能,以避免每次都導入靜態類型。# Before Python 3.10 Releasefrom typing import Uniondef f(list: List[Union[int, str]], param: Optional[int]): pass# In Python 3.10 Releasedef f(list: List[int | str], param: int | None): pass# Calling the functionf([1, 「abc」], None)在 Python 3.10 中,現在您可以使用管道運算符 ( | ) 來指定類型集合,而不是從typing模塊中導入Union。此外,現有的typing.Union和| 語法應該是等效的,如下比較——int | str == typing.Union[int, str]typing.Union[int, int] == intint | int == intPython 確實通過使用反斜槓( \ ) 支持多行語句,但是 Python 中的某些結構不應該使用反斜槓來編寫多行語句。其中之一是具有多行with( )語句的上下文管理器。例如——# Before Python 3.10 Releasewith (open("a_really_long_foo") as foo, open("a_really_long_bar") as bar): passTraceback (most recent call last): File "<input>", line 1, in <module> File "demo.py", line 19 with (open("a_really_long_foo") as foo, ^SyntaxError: invalid syntax是的,這看起來不像是一個功能,但它是對以前版本的一個重大改進,因為你可能遇到過使用多行上下文管理器的用例,但由於上述錯誤而無法執行。如果還沒有明白,讓我們舉出更多的例子說明在Python 3.10版本中你可以用上下文管理器做什麼——# After Python 3.10 Releasefrom contextlib import contextmanager@contextmanagerdef f(x): try: yield x finally: pass# Example 1with f('c') as a, f('a') as b: pass# Example 2with f('c') as a, f('a') as b, f('a') as c: pass你現在而無需使用反斜槓就可以擁有多行上下文管理器語句,很棒吧?類型別名允許您快速定義可以為複雜類型聲明創建的新別名。例如——# Before Python 3.10UserInfo = tuple[str, int]這通常是可行的。然而,類型檢查器往往不可能知道這樣的語句是一個類型別名還是只是一個常規的全局變量的定義。# In Python 3.10from typing import TypeAliasCard: TypeAlias = tuple[str, str]Deck: TypeAlias = list[Card]上面的 python 代碼為tuple[str, str]聲明了一個別名UserInfo,因為它是一種組合了多種類型的值的數據類型。在示例中,它是一個字符串和一個整數。此外,添加TypeAlias注釋可以向類型檢查器和任何閱讀該代碼的人闡明意圖。zip( )是Python 中的一個內置函數,你可能在組合多個列表/序列時使用過。Python3.10引入了新的strict參數,它添加了一個運行時測試來檢查所有被壓縮的序列是否具有相同的長度。# Before Python 3.10names = ["Tom", "Harry", "Jessica", "Robert", "Kevin"]numbers = ["21024", "75978", "92176", "75192", "34323"]list(zip(names, numbers)).....Output:[(Tom, 21024), (Harry, 75978), (Jessica, 92176), (Robert, 75192), (Kevin, 34323)]讓我們再次使用上面顯示的這兩個序列的名稱和編號。現在,這些序列之間唯一的區別是,數字的長度與序列名稱不一樣,如下所示——# Before Python 3.10names = ["Tom", "Harry", "Jessica", "Robert"] # Kevin is missingnumbers = ["21024", "75978", "92176", "75192", "34323"]# Zipping using zip()list(zip(names, numbers))......Output[(Tom, 21024), (Harry, 75978), (Jessica, 92176), (Robert, 75192)]如果你的數據集比較大,這類錯誤就很難發現。而且,即使你意識到有問題,也不一定容易解決。假設被壓縮的序列具有相同的長度,就可以幫助你避免這種差異的發生。在 Python 3.10 中,strict參數可以幫助你在一開始就避免這種情況——# In Python 3.10names = ["Tom", "Harry", "Jessica", "Robert"] # Kevin is missingnumbers = ["21024", "75978", "92176", "75192", "34323"]# Zipping using zip() with additional Parameter strict=Truelist(zip(names, numbers, strict=True))....Output:Traceback (most recent call last): File "<stdin>", line 1, in <module>ValueError: zip() argument 2 is shorter than argument 1雖然strict並沒有真正向zip( )中添加任何新功能,但它可以幫助您避免那些難以發現的錯誤。此版本有很多錯誤修復以及其他一些小更新,如果您有興趣,可以在官方發布頁面上找到。
(https://www.python.org/downloads/release/python-3100/)原文標題:
Python 3.10 Released — Top 5 New Features You should Know
原文鏈接:
https://varun-singh-01.medium.com/python-3-10-released-top-5-new-features-you-should-know-bf968ac99230
編輯:於騰凱
歐陽錦,一名在埃因霍溫理工大學就讀的碩士生。喜歡數據科學和人工智能相關方向。歡迎不同觀點和想法的交流與碰撞,對未知充滿好奇,對熱愛充滿堅持。
工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是數據科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。
你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於數據科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯繫,THU數據派產學研的背景為志願者帶來好的發展機遇。
其他福利:來自於名企的數據科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。
點擊文末「閱讀原文」加入數據派團隊~
轉載須知
如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派ID:DatapiTHU),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。
發布後請將鏈接反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。