跳转到主要内容

严格匹配枚举的所有可能性

项目描述

enumatch

PyPI version PyPI pyversions Test Coverage

严格匹配枚举的所有可能性。

用例

这个小小的match函数通过强制我们显式地或使用通配符匹配所有可能性,使Python的枚举字段的匹配更安全。

使用...(省略号)作为通配符。

提示

  • 为了避免任何对枚举的修改都安全,请避免使用...(通配符)。
  • 在编译时创建匹配器以获得编译时验证和零运行时成本。

示例:扁平匹配器

from enum import Enum, auto
from enumatch import match

class Side(Enum):
    left = auto()
    right = auto()

# Define a simple matcher
matcher1 = match({Side.left: "Go left", Side.right: "Go right"})

assert matcher1[Side.left] == "Go left"
assert matcher1[Side.right] == "Go right"

# Define a matcher with a default case
matcher2 = match({Side.left: "Go left", ...: "Go right"})

assert matcher2[Side.left] == "Go left"
assert matcher2[Side.right] == "Go right"

# If all the possibilities are not handled, we get error
with pytest.raises(ValueError, match="missing possibilities: Side.right"):
    match({Side.left: "Go left"})

示例:嵌套匹配器

from enum import Enum, auto
from enumatch import match, forall

class Switch(Enum):
    on = auto()
    off = auto()

# is_on[main_switch][bedroom_switch]: bool
is_on = match({
    Switch.on: match({Switch.on: True, Switch.off: False}),
    Switch.off: forall(Switch, False),
})

assert is_on[Switch.on][Switch.on] == True
assert is_on[Switch.on][Switch.off] == False
assert is_on[Switch.off][Switch.on] == False
assert is_on[Switch.off][Switch.off] == False

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源分发

enumatch-0.2.0.tar.gz (3.5 kB 查看哈希值)

上传时间:

构建分发

enumatch-0.2.0-py3-none-any.whl (3.7 kB 查看哈希值)

上传于 Python 3

由以下组织支持