【发布时间】:2021-06-03 20:11:04
【问题描述】:
我一直在使用 Python 3.10 中的结构模式匹配,但不知道如何让它匹配一个集合。例如我试过:
a = {1,2,3}
match a:
case set(1,2,3):
print('matched')
我试过了:
a = {1,2,3}
match a:
case set([1,2,3]):
print('matched')
还有:
a = {1,2,3}
match a:
case [1,2,3] if isinstance(a, set):
print('matched')
我猜有一种方法可以做到这一点,因为我们可以匹配其他对象,我只是缺少正确的语法,但我想不出还有什么可以尝试的。任何帮助,将不胜感激!谢谢!
【问题讨论】:
-
我认为将 SPM 用于集合没有意义。如果你写
case {a, b, c}:,它怎么知道哪个变量应该获取集合中的每个值,因为集合没有任何顺序? -
我明白为什么有人肯定会做出这个决定。我可能会建议在可能返回多种类型的情况下,最好使用相同的匹配语句,而不是结合匹配语句和 if 块,但我认为你不应该在正确的代码中包含这些情况。我还看到我无法匹配元组或冻结集也是键的字典。我在想 PEP-634 表明支持所有这些基本类型。也许我只是误解了它在说什么?
-
我还看到我无法匹配元组或冻结集也是键的字典。能够将带有元组或冻结集的字典作为键匹配似乎会有所帮助,但也许这也超出了 SPM 的含义
-
您似乎试图将其用作
switch/case。这不是预期用途。 -
我肯定是 :) 我想我的理解是这意味着开关 / 大小写 + 模式匹配的优点都合二为一。也许我完全看错了?似乎我可以匹配列表或字典键中的特定字符串以及数字的特定值等......甚至自定义类之间的匹配相等性也可以。如果我们无法将内置类型与特定值匹配,我很惊讶本教程显示将自定义类与特定值匹配
标签: python structural-pattern-matching