是否可以在 Python 中创建一个使用其内部可迭代抽象的模板?例如,代码很直观:
from typing import Iterable
match value:
case slice(Iterable(), Iterable(), Iterable()):
...
但它不起作用。抛开该模式需要命名参数这一事实不谈,主要问题与什么不是类型slice
有关。typing.Iterable
我看到两种选择。其中之一是列出具体类型的参数:
match value:
case slice(start = list() | tuple() | ...,
stop = list() | tuple() | ...,
step = list() | tuple() | ...):
...
这里出现了一个问题:是否可以在一个地方指示列表并在需要时引用它?
第二种选择是添加isinstance
对相关参数的检查:
match value:
case slice(start=x, stop=y, step=z) if all(isinstance(param, Iterable)
for param in [x, y, z]):
...
但是如果某些参数不仅可以作为可迭代对象接受,就会出现问题,例如:
case my_class(Iterable(), Iterable() | int()): ...
我明白我们可以恢复正常if-elif-else
,但我想相信match-case
在设计上可以发明一些东西。