num = 3
match num:
case 1:
print("One")
case 2:
print("Two")
case _:
print("Other")
Other
check_number(1) # one
check_number(10) # Other
One Other
def check_number(num):
match num:
case 1 | 2:
print("1或者2")
case 3 | 4:
print("3或者4")
case _:
print("Other")
check_number(1)
check_number(4)
1或者2 3或者4
def check_number(num):
match num:
case num if num > 0:
print("大于0的数")
case num if num < 0:
print("小于0的数")
case _:
print("zero")
check_number(1)
check_number(-1)
1或者2 Other
def check_number(list):
match list:
case 1, *others:
print(f"第一个元素是1的列表, 剩余元素{others}")
case 2, 3, *others:
print(f"前两个元素是2和3的列表, 其余元素是{others}")
case _:
print("nothing")
命中case1
check_number([1])
第一个元素是1的列表, 剩余元素[]
命中case1
check_number([1, 3])
第一个元素是1的列表, 剩余元素[3]
命中case2
check_number([2, 3, 4])
前两个元素是2和3的列表, 其余元素是[4]
def run_match(data):
match data:
case {"name": name, "age": age}:
print(f"{name} is {age} years old.")
case {"name": name, "salary": salary}:
print(f"{name}'s salary is {salary}.")
case {"name": name, **others}:
print(f"{name} has other information:")
print(others)
case _:
print("nothing")
命中case1
run_match({"name": "小明", "age":20})
小明 is 20 years old.
命中case2
run_match({"name": "小明", "salary": "1万"})
小明's salary is 1万.
命中case3
run_match({"name": "小明", "sex": "男"})
小明 has other information: {'sex': '男'}
命中case1
run_match({"name": "小明", "salary": "1万", "age": 20})
小明 is 20 years old.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"(x={self.x}, y={self.y})"
def run_match(instance):
match instance:
case Point(x=1, y=2):
print(instance)
case Point(x=3, y=4):
print(instance)
case _:
print("nothing")
point1 = Point(1, 2)
point2 = Point(3, 4)
run_match(point1)
run_match(point2)
(x=1, y=2) (x=3, y=4)
这里要注意一点, match-case
是结构模式匹配,需要提供的是一个模式而不是一个具体的对象。
case
语句中,一定不能写成 Point(1, 2)
, 这等于是创建了一个和point1完全不同的新的实例;
这样做的话会抛 TypeError
异常。