Python 3.10 新增功能
本文解釋了 Python 3.10 中與 3.9 相比的新特性。
帶括號的上下文管理器:
現在支援使用括號在上下文管理器中跨多行繼續。這允許以類似於以前使用 import 語句可能的方式在多行中格式化一長串上下文管理器。例如,所有這些示例現在都有效:
with (CtxManager() as example): ... with ( CtxManager1(), CtxManager2() ): ... with (CtxManager1() as example, CtxManager2()): ... with (CtxManager1(), CtxManager2() as example): ... with ( CtxManager1() as example1, CtxManager2() as example2 ): ... with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): |
這種新語法使用了新解析器的非 LL(1) 能力。檢視PEP 617瞭解更多詳情。
結構模式匹配
增加match和case語句實現結構模式匹配,模式匹配使程式能夠從複雜的資料型別中提取資訊,在資料結構上進行分支,並根據不同形式的資料應用特定的操作。
模式匹配的通用語法是:
match subject: case <pattern_1>: <action_1> case <pattern_2>: <action_2> case <pattern_3>: <action_3> case _: <action_wildcard> |
match 語句採用表示式並將其值與作為一個或多個 case 塊給出的連續模式進行比較。具體來說,模式匹配透過以下方式運作:
- 使用具有型別和形狀的資料 (the subject)
- 評估subject的match宣告
- case從上到下將主題與語句中的每個模式進行比較,直到確認匹配為止。
- 執行與確認匹配的模式相關聯的操作
- 如果未確認完全匹配,則最後一種情況,萬用字元_(如果提供)將用作匹配情況。如果未確認完全匹配且不存在萬用字元大小寫,則整個匹配塊為空操作。
簡單模式:匹配文字
讓我們把這個例子看作是最簡單形式的模式匹配:一個值,主題,與幾個文字匹配,模式。在下面的示例中,status是 match 語句的主題。模式是每個 case 語句,其中文字表示請求狀態程式碼。匹配後執行與案例相關的操作:
def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I'm a teapot" case _: return "Something's wrong with the internet" |
如果上述函式傳遞了status418 的a ,則返回“我是茶壺”。如果上面的函式傳遞了status500 的 a,則 case 語句 with _將作為萬用字元匹配,並返回“網際網路出現問題”。請注意最後一個塊:變數名稱 "_" 充當萬用字元並確保始終匹配。
您可以使用|(“or”)在單個模式中組合多個文字:
case 401 | 403 | 404: return "Not allowed" |
結合類使用:
class Point: x: int y: int def location(point): match point: case Point(x=0, y=0): print("Origin is the point's location.") case Point(x=0, y=y): print(f"Y={y} and the point is on the y-axis.") case Point(x=x, y=0): print(f"X={x} and the point is on the x-axis.") case Point(): print("The point is located somewhere else on the plane.") case _: print("Not a point") |
可以在模式中新增一個if子句,稱為“守衛Guard”。如果守衛為假,match則繼續嘗試下一個案例塊。
match point: case Point(x, y) if x == y: print(f"The point is located on the diagonal Y=X at {x}.") case Point(x, y): print(f"Point is not on the diagonal.") |
更多點選標題
相關文章
- Python 3.10 中新的功能和變化Python
- Python 3.10 正式釋出,新增模式匹配,同事用了直呼真香!Python模式
- 利用Conda嚐鮮Python 3.10Python
- 剛剛,Python 3.10 正式釋出了!我發現了一個可怕的功能...Python
- python3.10監控redis例項PythonRedis
- 如何在Linux 中安裝 Python 3.10LinuxPython
- 3.10
- 為你的 Python 平臺類遊戲新增跳躍功能Python遊戲
- QGIS3.10配置python外掛開發環境S3Python開發環境
- Centos編譯Python3.10解決openssl異常CentOS編譯Python
- Metasploit新增技巧提示功能
- 為網頁新增留言功能網頁
- PhotoShop 2022 mac版新增功能Mac
- ABAQUS 2022新增功能詳解
- JDK 16的新增功能:ZGCJDKGC
- Ubuntu20.04 從原始碼編譯安裝 python3.10Ubuntu原始碼編譯Python
- 輸入框/搜尋功能/新增、修改功能測試
- python字典新增_增Python
- 114 新增CNZZ流量統計功能
- C#各版本新增加功能C#
- VMware vSphere 8 Update 3 新增功能
- rabbitmq 新增遠端訪問功能MQ
- Python3.10第二個alpha版本來了!最新特性值得關注Python
- Python影像暗水印新增Python
- python如何新增註釋Python
- DKHhadoop新增新節點功能介紹Hadoop
- js小功能之-新增元素-清楚元素JS
- RunnerGo V4.6.0 新增功能介紹Go
- Laravel-admin 新增 Excel 匯入功能LaravelExcel
- Nexpose 6.6.273 釋出,新增功能概覽
- 帝國CMS如何新增評論功能
- 為設定中心新增常用功能
- Vue專案中新增鎖屏功能Vue
- SOLIDWORKS新增的一些功能2Solid
- SOLIDWORKS新增的一些功能1Solid
- .NET MAUI Community Toolkit 中的新增功能UIUnity
- SOLIDWORKS 2023新增功能 - PDM資料管理Solid
- SovitJs新增跨場景複製元件、新增地面背景等功能JS元件