条件判断 (match)

4.6 2026-01-27

match 对应其他语言的switch,不需要在每个条件下写break就可以避免重复执行


match condition:
    "left":
        # condition 等于left时,打印"left"
        print("left")
    "right":
        # condition 等于right时,打印"right"
        print("right")
    _:
        # 既不等于left也不等于right,打印"default"
        print("default")
          

数组


match x:
    []:
        print("空数组")
    [1, 3, "test", null]:
        print("完全一样的数组")
    [var start, _, "test"]:
        print("第一个元素 ", start, ", 最后一个元素是 \"test\"")
    [42, ..]:
        print("以42开头的数组")
          

字典


match x:
    {}:
        print("空字典")
    {"name": "Dennis"}:
        print("名称(name)是Dennis")
    {"name": "Dennis", "age": var age}:
        print("Dennis ", age, " 岁了")
    {"name", "age"}:
        print("字典包含name和age属性,但不是 Dennis :(")
    {"key": "godotisawesome", ..}:
        print("只检查一个属性,忽略其余")
          

匹配多模式


match x:
    1, 2, 3:
        print("It's 1 - 3")
    "Sword", "Splash potion", "Fist":
        print("哦,受到伤害")
          

额外匹配


match point:
    [0, 0]:
        print("原点")
    [_, 0]:
        print("X轴上的点")
    [0, _]:
        print("Y轴上的点")
    [var x, var y] when y == x:
        print("y = x 线")
    [var x, var y] when y == -x:
        print("y = -x 线")
    [var x, var y]:
        print("点坐标 (%s, %s)" % [x, y])