Python 3.10中match语句能否按顺序匹配多变量值?如何实现?
问题解答
你的需求是可行的,但原代码写法存在错误,无法达到预期效果,以下是具体说明和实现方案:
原代码的问题
match a, b, c 是将三个变量打包成三元组进行匹配,而 case "ABC" | 2 | 3 是匹配单个值等于这三个中的任意一个,两者类型不匹配,因此永远不会触发该case的逻辑。
正确实现方式
根据你实际的匹配需求,分两种场景实现:
场景1:精确匹配三个变量的对应值(a="ABC"、b=2、c=3同时满足)
直接在case中写对应的三元组即可:
def main(): a = "ABC" b = 2 c = 3 match a, b, c: case "ABC", 2, 3: print("match all") if __name__ == "__main__": main()
执行这段代码会输出 match all,符合预期。
场景2:按顺序匹配单个变量(依次检查a、b、c是否满足对应值,命中即执行)
如果需要按顺序匹配,只要某个变量满足对应值就触发逻辑,可以用通配符 _ 忽略其他变量,同时注意case的顺序(match会按顺序匹配,先命中的case优先执行):
def main(): a = "ABC" b = 2 c = 3 match a, b, c: case "ABC", _, _: print("matched a") case _, 2, _: print("matched b") case _, _, 3: print("matched c") # 如果需要优先匹配三个变量同时满足的情况,把对应的case放在最前面 # case "ABC", 2, 3: # print("match all") if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

