Python 3.10中未知长度列表的结构模式匹配



让我们假设我有以下函数:

def sum_ints(my_list: list[int]) -> int:
return sum(my_list)

在开始添加my_list中的元素之前,我想使用新的match语句检查所有元素的类型。

例如,如果my_list的长度为2,我可以执行:

def sum_ints(my_list: list[int]) -> int:
match my_list:
case [int(), int()]:
return sum(my_list)
case _:
raise Exception("...")

如何将列表的大小写与n元素相匹配?

我认为在您的情况下,您只需要all内置函数。

if all(isinstance(i, int) for i in my_list):
# Do Something
else:
# raise Exception("...")

但是,如果真的想通过match语句尝试这种逻辑,则必须首先捕获元素,并使用match-guard来验证条件,但在这种情况下,这是一种复杂/不可读的解决方案。

a = [1, 2]
match a:
case [*elements] if all(isinstance(i, int) for i in elements):
print("All elements are int")
case _:
raise Exception("Elements are not int")

另请参阅:

  • Python 3.10模式匹配(PEP 634(-字符串中的通配符

最新更新