如何在Python的模式中匹配
...
(Ellipsis
)和NotImplemented
?天真的尝试
import random
x = random.choice([..., NotImplemented])
match x:
case NotImplemented:
print("1")
case ...:
print("2")
以两种方式失败:
...
是一个语法错误NotImplemented
被视为标识符而不是常量,因此匹配所有内容!使用
Ellipsis
代替 ...
会遇到与 NotImplemented
相同的问题,因为它匹配所有内容。
通过
.
模块上的 builtins
表示法访问这些名称意味着 match
将它们视为常量:
import builtins
match x:
case builtins.NotImplemented:
print("1")
case builtins.Ellipsis:
print("2")
Type()
表示法,并匹配这些常量的类型而不是值:
NotImplementedType = type(NotImplemented)
EllipsisType = type(Ellipsis)
match x:
case NotImplementedType():
print("1")
case EllipsisType():
print("2")
answer之外,我们还可以将值保存在临时变量中,然后对其使用if
,如下所示:
import random
x = random.choice([..., NotImplemented])
match x:
case val if val is NotImplemented:
print("1")
case val if val is ...:
print("2")
这种方法的优点是无需准备或导入。