有没有办法评估 case 语句变量是否在特定列表内?考虑以下场景。我们有三个列表:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
然后我想检查 x 是否在每个列表中。像这样的东西(当然这是一个语法错误,但我希望你明白这一点):
match x:
case in a:
return "132"
case in b:
return "564"
case in c:
return "798"
使用 if-else 场景可以很容易做到这一点。尽管如此,如果有很多列表,请关注匹配情况。对于大列表,像这样写它们将是一项平凡的任务:
match x:
case 1 | 2 | 3:
return "132"
case 4 | 5 | 6:
return "564"
case 7 | 8 | 9:
return "762"
是否有一种简单的方法可以检查每种情况的多个条件,而无需将它们写下来?
我检查了重复项,但找不到它们,我希望我不会错过任何东西。如果有重复的问题,请友善地告诉我。
看起来
case
接受以Python 3.10开头的“保护”子句,您可以将其用于此目的:
match x:
case w if w in a:
# this was the "case in a" in the question
case w if w in b:
# this was the "case in b" in the question
...
这里的
w
实际上捕获了x
的值,这也是这里语法的一部分,但它在链接的whatsnew页面上列出的其他一些奇特的cases中更有用。