严格匹配枚举的所有可能性
项目描述
enumatch
严格匹配枚举的所有可能性。
用例
这个小小的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 查看哈希值)