如何在省略号或未实现上进行模式匹配

问题描述 投票:0回答:2

如何在Python的模式中匹配

...
Ellipsis
)和
NotImplemented
?天真的尝试

import random
x = random.choice([..., NotImplemented])

match x:
    case NotImplemented:
        print("1")
    case ...:
        print("2")

以两种方式失败:

  • ...
    是一个语法错误
  • NotImplemented
    被视为标识符而不是常量,因此匹配所有内容!

使用

Ellipsis
代替
...
会遇到与
NotImplemented
相同的问题,因为它匹配所有内容。

python pattern-matching
2个回答
3
投票

通过

. 模块上的 
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")
    

0
投票
除了@Eric的

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")
这种方法的优点是无需准备或导入。

© www.soinside.com 2019 - 2024. All rights reserved.