Python match...case 语句

match...case 提供了一种更强大的模式匹配方法。

模式匹配是一种在编程中处理数据结构的方式,可以使代码更简洁、易读。

match...case 是 Python 3.10 版本引入的新语法。

match...case 语法结构如下:

match expression:
    case pattern1:
        # 处理pattern1的逻辑
    case pattern2 if condition:
        # 处理pattern2并且满足condition的逻辑
    case _:
        # 处理其他情况的逻辑

参数说明:

  • match语句后跟一个表达式,然后使用case语句来定义不同的模式。
  • case后跟一个模式,可以是具体值、变量、通配符等。
  • 可以使用if关键字在case中添加条件。
  • _通常用作通配符,匹配任何值。

1. 简单的值匹配

实例代码

def match_example(value):
    match value:
        case 1:
            print("匹配到值为1")
        case 2:
            print("匹配到值为2")
        case _:
            print("匹配到其他值")

match_example(1)  # 输出: 匹配到值为1
match_example(2)  # 输出: 匹配到值为2
match_example(3)  # 输出: 匹配到其他值

以上代码中,match 语句用于匹配 value 的不同情况,每个 case 语句表示一种可能的匹配情况,_ 通配符表示其他情况。

输出结果为:

匹配到值为1
匹配到值为2
匹配到其他值

2. 使用变量

实例代码

def match_example(item):
    match item:
        case (x, y) if x == y:
            print(f"匹配到相等的元组: {item}")
        case (x, y):
            print(f"匹配到元组: {item}")
        case _:
            print("匹配到其他情况")

match_example((1, 1))  # 输出: 匹配到相等的元组: (1, 1)
match_example((1, 2))  # 输出: 匹配到元组: (1, 2)
match_example("other") # 输出: 匹配到其他情况

输出结果为:

匹配到相等的元组: (1, 1)
匹配到元组: (1, 2)
匹配到其他情况

3. 类型匹配

实例代码

class Circle:
    def __init__(self, radius):
        self.radius = radius

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

def match_shape(shape):
    match shape:
        case Circle(radius=1):
            print("匹配到半径为1的圆")
        case Rectangle(width=1, height=2):
            print("匹配到宽度为1,高度为2的矩形")
        case _:
            print("匹配到其他形状")

match_shape(Circle(radius=1))          # 输出: 匹配到半径为1的圆
match_shape(Rectangle(width=1, height=2)) # 输出: 匹配到宽度为1,高度为2的矩形
match_shape("other")                    # 输出: 匹配到其他形状

输出结果为:

匹配到半径为1的圆
匹配到宽度为1,高度为2的矩形
匹配到其他形状