📜  python match 语句 - Python (1)

📅  最后修改于: 2023-12-03 15:04:06.167000             🧑  作者: Mango

Python match语句

Python 3.10 引入了新特性 match 语句。它与 switch-case 语句类似,但比其更加强大和灵活。在本文中,我们将探讨 match 语句的一些基本用法以及如何将其与模式匹配(Pattern-matching)结合使用。

基本用法

match 语句可以理解成多个 if-elif-else 语句的替代品。下面是一个简单的示例:

def func(x):
    match x:
        case 1:
            print("x is 1")
        case 2:
            print("x is 2")
        case _:  # `_` 处表示默认情况
            print("x is neither 1 nor 2")

上述示例中,我们使用 match 语句对传入函数 func() 的参数 x 进行匹配。在该语句中,我们使用 case 关键字分别对 x 的值进行匹配。如果传入的 x 值为 1,则打印 "x is 1";如果传入的 x 值为 2,则打印 "x is 2";否则打印 "x is neither 1 nor 2"。

值得注意的是,在 case 关键字后,我们使用 : 将其与对应的语句块隔开。如果省略了 :,将会引发语法错误。

模式匹配

除了上述基本用法,match 语句还支持使用模式匹配进行更复杂的操作。模式匹配可以让我们根据对象的属性、类型、结构等条件来进行精确匹配,从而让代码更加简洁、易读且易于维护。

下面是一个使用模式匹配的示例:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

def func(point):
    match point:
        case Point(x=0, y=0):
            print("point is at the origin")
        case Point(x=0, y=_):
            print(f"point is on the x-axis at y={point.y}")
        case Point(x=_, y=0):
            print(f"point is on the y-axis at x={point.x}")
        case Point(x=x, y=y):
            print(f"point is at ({x}, {y})")
        case _:
            print("invalid point")

point1 = Point(0, 0)
point2 = Point(0, 2)
point3 = Point(2, 0)
point4 = Point(1, 1)
point5 = "invalid"

func(point1)  # 输出 "point is at the origin"
func(point2)  # 输出 "point is on the x-axis at y=2"
func(point3)  # 输出 "point is on the y-axis at x=2"
func(point4)  # 输出 "point is at (1, 1)"
func(point5)  # 输出 "invalid point"

上述示例中,我们定义了 Point 类,并在函数 func() 中使用了 match 语句对其进行模式匹配。在 case 语句中,我们根据 Point 的属性值来匹配不同的情况。例如,如果 Point 对象的 xy 均为 0,则输出 "point is at the origin";如果 x 为 0 而 y 不为 0,则输出 "point is on the x-axis at y=...";如果 y 为 0 而 x 不为 0,则输出 "point is on the y-axis at x=...";如果 xy 均不为 0,则输出 "point is at (..., ...)";最后,如果对象不是 Point 类型,则输出 "invalid point"。

结论

match 语句是 Python 3.10 新增的强大特性,它可以让我们对不同的情况进行灵活而精确的匹配。与传统的 if-elif-else 语句相比,match 语句更加简洁、易读且易于维护。在编写 Python 代码时,我们可以灵活地选择使用 match 语句来实现不同的功能,并让代码更加优雅!