python match case語法

學習路線:B站

普通的if判斷

def if_traffic_light(color):if color == 'red':return 'Stop'elif color == 'yellow':return 'Slow down'elif color == 'green':return 'Go'else:return 'Invalid color'print(if_traffic_light('red'))  # Output: Stop
print(if_traffic_light('yellow')) # Output: Slow down
print(if_traffic_light('green')) # Output: Go
print(if_traffic_light('blue')) # Output: Invalid color

使用match-case方式,同樣達到效果:

def match_case_1(color):match color:case 'red':return 'Stop'case 'green':return 'Go'case 'yellow':return 'Caution'case _:return 'Invalid color'
print(match_case_1('red'))
print(match_case_1('green'))
print(match_case_1('yellow'))

match-case 解包

普通的if語句:

def if_point(point: tuple):if len(point) == 2:if point[0] == 0 and point[1] == 0:print("origin")else:print(f"x={point[0]}, y={point[1]}")else:print("invalid point")

使用match-case改進:

# 使用match-case 解包
def match_case_1(point: tuple):"""使用match-case解包, 解包后可以使用變量名來訪問元組中的元素,可以使用通配符_來匹配任意值"""match point:case (0, 0):print(f"Origin")case (x, y):print(f"x={x}, y={y}")case other: # 也可以用下劃線代替print(f"{other}Unknown point")match_case_1((1, 2))  # x=1, y=2
match_case_1((0, 0))  # Origin
match_case_1((1,))  # (1,)Unknown point
match_case_1((1, 2, 3))  # (1, 2, 3)Unknown point

match-case 解包升級

# 使用match-case 解包
def match_case_1(point: tuple):"""使用match-case解包, 解包后可以使用變量名來訪問元組中的元素,可以使用通配符_來匹配任意值"""match point:case (0, 0):print(f"Origin")case (x, 0):print(f"on x-axis  x={x}, y=0")case (0, y):print(f"on y-axis x=0, y={y}")case (x, y):print(f"x={x}, y={y}")case other:print(f"{other}Unknown point")match_case_1((0, 1))  # on y-axis x=0, y=1
match_case_1((2,0))  # on x-axis  x=2, y=0
match_case_1((1, 2, 3))  # (1, 2, 3)Unknown point 

match-case 解包支持邏輯判斷

# 使用match-case 解包
def match_case_1(point: tuple):"""使用match-case解包, 解包后可以使用變量名來訪問元組中的元素,可以使用通配符_來匹配任意值"""match point:case (0, 0):print(f"Origin")case (x, 0) | (0, x): # 這里是或邏輯print(f"on axis")case (x, y):print(f"x={x}, y={y}")case other:print(f"{other}Unknown point")match_case_1((0, 1))  # on y-axis x=0, y=1
match_case_1((2,0))  # on x-axis  x=2, y=0
match_case_1((1, 2, 3))  # (1, 2, 3)Unknown point

match case 不會區分序列的類型,tuple與list是一樣的

my_tuple = (1, 2)
my_list = [1, 2]
my_tuple = (1, 2)
my_list = [1, 2]match my_tuple:case 1, 2: # 可以匹配上print("Tuple matches (1, 2)")match my_list:case 1, 2: # 可以匹配上print("List matches [1, 2]")match my_tuple:case (1, 2): # 可以匹配上print("Tuple matches (1, 2)")match my_list:case [1, 2]: # 同樣可以匹配print("List matches [1, 2]")

如果需要區分類型,則可以修改:

my_tuple = (1, 2)
my_list = [1, 2]match my_list:case tuple((1, 2)): # 無法匹配print("Tuple matches (1, 2)")match my_tuple:case tuple((1, 2)): # 可以匹配print("Tuple matches (1, 2)")

進一步的,match case 也可以匹配類型,而不必關心具體內容:

my_tuple = (1, 2)
my_list = [1, 2]match my_tuple:case tuple():print("Tuple match")case list():print("List match")

match case 支持條件判斷

def match_quadrant(point):match point:case (x, y) if x > 0 and y > 0:return "First quadrant"case (x, y) if x < 0 and y > 0:return "Second quadrant"case (x, y) if x < 0 and y < 0:return "Third quadrant"case (x, y) if x > 0 and y < 0:return "Fourth quadrant"case (0, _) | (_, 0):return "On the axis"case _:return "Invalid point"point1 = (5, 3)
point2 = (-2, 7)
print(match_quadrant(point1))
print(match_quadrant(point2))

match case 字典匹配

dict_p = {'x': 1, 'y': 2}match dict_p:case {'x': 0, 'y': 0}:print('origin')case {'x': x, 'y': y}:print(f'x={x}, y={y}')

也可以部分匹配:

dict_p = {'x': 1, 'y': 2}match dict_p:case {'x': 0, 'y': 0}:print('origin')case {'x':1 }:print(f'x={x}, y={y}')

match case 匹配自定義類

class Point:def __init__(self, x, y):self.x = xself.y = yp = Point(1, 2)
match p:# 這里的case匹配的是p的類型和值,值必須是關鍵字參數# 否則報錯:TypeError: Point() accepts 0 positional sub-patterns (2 given)case Point(x=1, y=2):print("Point is (1, 2)")case Point(x=3, y=4):print("Point is (3, 4)")case _:print("Point is not (1, 2) or (3, 4)")

如果想要在case中使用位置參數,需要添加類變量__match_args__ = ("x", "y")

class Point:# 指定macth case中的位置參數__match_args__ = ("x", "y")def __init__(self, x, y):self.x = xself.y = yp = Point(1, 2)
match p:# 這里的case匹配的是p的類型和值,值必須是關鍵字參數case Point(x, y):print("Point is (1, 2)")case Point(x=3, y=4):print("Point is (3, 4)")case _:print("Point is not (1, 2) or (3, 4)")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900057.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900057.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900057.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LLaMA-Factory大模型微調全流程指南

該文檔為LLaMA-Factory大模型微調提供了完整的技術指導&#xff0c;涵蓋了從環境搭建到模型訓練、推理和合并模型的全流程&#xff0c;適用于需要進行大模型預訓練和微調的技術人員。 一、docker 容器服務 請參考如下資料制作 docker 容器服務&#xff0c;其中&#xff0c;掛…

【HCIA】靜態綜合實驗練習筆記

實驗拓撲圖如下&#xff1a; 實驗配置思路如下&#xff1a; 1、網段劃分、配置IP地址 2、配置DHCP&#xff0c;使客戶端獲得ip地址 3、配置靜態明細路由&#xff0c;內網全網通 4、配置空接口防環 5、配置優先級&#xff0c;實現選路最佳 6、配置缺省路由&#xff0c;實現公網通…

大數據(4.5)Hive聚合函數深度解析:從基礎統計到多維聚合的12個生產級技巧

目錄 背景一、Hive聚合函數分類與語法1. 基礎聚合函數2. 高級聚合函數 二、6大核心場景與案例場景1&#xff1a;基礎統計&#xff08;SUM/COUNT&#xff09;場景2&#xff1a;多維聚合&#xff08;GROUPING SETS&#xff09;場景3&#xff1a;層次化聚合&#xff08;ROLLUP&…

RTOS基礎 -- NXP M4小核的RPMsg-lite與端點機制回顧

一、RPMsg-lite與端點機制回顧 在RPMsg協議框架中&#xff1a; Endpoint&#xff08;端點&#xff09; 是一個邏輯通信端口&#xff0c;由本地地址&#xff08;local addr&#xff09;、遠程地址&#xff08;remote addr&#xff09;和回調函數組成。每個消息都會發送到特定的…

NineData云原生智能數據管理平臺新功能發布|2025年3月版

本月發布 15 項更新&#xff0c;其中重點發布 3 項、功能優化 11 項、性能優化 1 項。 重點發布 基礎服務 - MFA 多因子認證 新增 MFA 多因子認證&#xff0c;提升賬號安全性。系統管理員開啟后&#xff0c;所有組織成員需綁定認證器&#xff0c;登錄時需輸入動態驗證碼。 數…

DAY 35 leetcode 202--哈希表.快樂數

題號202 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變不到 1。如果這個過程 結果為 1&a…

Maven+Spring實現后端開發

一、前置知識的介紹 1.Spring 輕量級的 DI / IoC 和 AOP 容器的開源框架 容器的開源框架網址&#xff1a;https://spring.io/projects/spring-framework 作用&#xff1a;可簡化管理創建和組裝對象之間的依賴關系 將controller----->service------->dao層的依賴配置…

解鎖界面設計密碼,打造極致用戶體驗

界面設計是對軟件、網站、移動應用等產品的用戶界面進行設計的過程&#xff0c;旨在為用戶提供美觀、易用、高效的交互體驗。以下是關于界面設計的一些主要方面&#xff1a; 一、設計原則 用戶中心原則&#xff1a;以用戶為中心&#xff0c;了解用戶的需求、期望、行為和習慣…

Joint Receiver Design for Integrated Sensing and Communications

摘要——在本文中&#xff0c;我們研究了集成感知與通信(ISAC)系統的聯合接收機設計&#xff0c;其中通信信號和目標回波信號同時被接收和處理&#xff0c;以在兩種功能之間實現平衡性能。特別地&#xff0c;我們提出了兩種設計方案來解決聯合感知和通信問題中的接收信號處理。…

DeepSeek接入飛書多維表格,效率起飛!

今天教大家把DeepSeek接入飛書表格使用。 準備工作&#xff1a;安裝并登錄飛書&#xff1b;可以準備一些要處理的數據&#xff0c;確保數據格式正確&#xff0c;如 Excel、CSV 等&#xff0c;也可直接存儲到飛書多維表格。 創建飛書多維表格&#xff1a;打開飛書&#xff0c;點…

【C語言入門】由淺入深學習指針 【第二期】

目錄 1. 指針變量為什么要有類型&#xff1f; 2. 野指針 2.1 未初始化導致的野指針 2.2 指針越界導致的野指針 2.3 如何規避野指針 3. 指針運算 3.1 指針加減整數 3.2 指針減指針 3.3 指針的關系運算 4. 二級指針 5. 指針數組 5.1 如何使用指針數組模擬二維數組 上…

OpenCV 圖形API(13)用于執行兩個矩陣(或圖像)逐元素乘法操作的函數mul()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 描述 計算兩個矩陣的每個元素的縮放乘積。 mul函數計算兩個矩陣的逐元素乘積&#xff1a; dst ( I ) saturate ( scale ? src1 ( I ) ? src2 ( I ) ) …

人工智能混合編程實踐:C++調用封裝好的DLL進行圖像超分重建

人工智能混合編程實踐:C++調用封裝好的DLL進行圖像超分重建 前言相關介紹C++簡介ONNX簡介ONNX Runtime 簡介**核心特點**DLL 簡介**核心特點****創建與使用****應用場景****優點與挑戰**圖像異常檢測簡介應用場景前提條件實驗環境項目結構C++調用封裝好的DLL進行圖像超分重建C…

Linux內核之高效緩沖隊列kfifo

一、先說FIFO 隊列是常見的一種數據結構&#xff0c;簡單看來就是一段數據緩存區&#xff0c;可以存儲一定量的數據&#xff0c;先存進來的數據會被先取出&#xff0c;First In Fist Out&#xff0c;就是FIFO。 FIFO主要用于緩沖速度不匹配的通信。 例如生產者&#xff08;數…

【面試篇】Kafka

一、基礎概念類 問題&#xff1a;請簡述 Kafka 是什么&#xff0c;以及它的主要應用場景有哪些&#xff1f; 答案&#xff1a;Kafka 是一個分布式流處理平臺&#xff0c;它以高吞吐量、可持久化、可水平擴展等特性而聞名。其主要應用場景包括&#xff1a; 日志收集&#xff1a…

解釋回溯算法,如何應用回溯算法解決組合優化問題?

一、回溯算法核心原理 回溯算法本質是暴力窮舉的優化版本&#xff0c;采用"試錯剪枝"策略解決問題。其核心流程如下&#xff1a; ?路徑構建&#xff1a;記錄當前選擇路徑?選擇列表&#xff1a;確定可用候選元素?終止條件&#xff1a;確定遞歸結束時機?剪枝優化…

Vue 學習隨筆系列二十二 —— 表格高度自適應

表格高度自適應 文章目錄 表格高度自適應1、方法一2、方法二 1、方法一 根據頁面元素計算各自占比 <template><div class"main"><div class"query-form" ref"Query"><QueryFormref"QueryForm"query"query&q…

ubuntu22.04.5安裝docker,解決安裝出現的錯誤,解決Docker hello-world沒打印出來

文章目錄 前言一 安裝失敗解決1結合具體報錯分析2 首先懷疑是VPN的問題3 直接百度報錯信息4最終解決問題 二 驗證Docker hello-world沒打印出來總結 前言 先說一下前面的情況&#xff0c;使用的是公司的工作站&#xff0c;登錄公司一個帳號使用的公司網絡&#xff0c;使用網上…

idea插件(自用)

.ignore git排除文件插件&#xff1a;.ignore介紹 Grep console 自定義日志顏色&#xff1a;Grep console介紹 AceJump 光標快速定位&#xff1a;AceJump介紹 Key promoter 提示插件:Key promoter介紹 MetricsReloaded 分析代碼復雜度的插件&#xff1a;MetricsReload…