高效的基于调度的调用,这可能是另一种语言中的switch语句。
switcheroo的Python项目详细描述
开关O
高效的基于调度的调用,这可能是另一种语言中的switch语句。
短期使用
fromswitcherooimportSwitchswitch=Switch({'foo':lambdax:x+1,})
>>> switch['foo'](1) 2
>>> switch['bar'](1) Traceback (most recent call last): ... KeyError: 'bar'
fromswitcherooimportSwitch,defaultswitch=Switch({'foo':lambdax:x+1,default:lambdax:x-1,})
>>> switch['foo'](1) 2
>>> switch['bar'](1) 0
装饰器使用
fromswitcherooimportSwitchswitch=Switch()@switch.handles('foo')defhandle_foo(x):returnx+1@switch.defaultdefhandle_others(x):returnx-1
>>> switch['foo'](1) 2
>>> switch['bar'](1) 0
类助手用法
classMoarThingz(object):switch=Switch()def__init__(self,state):self.state=state@switch.handles('foo')defhandle_foo(self,x):returnself.state-x@switch.defaultdefhandle_foo(self,x):returnself.state+xdefdispatch(self,case,factor,x):returnfactor*self.switch[case](self,x)
>>> things = MoarThingz(3) >>> things.dispatch('foo', factor=1, x=1) 2 >>> things.dispatch('bar', factor=-1, x=2) -5
子类用法
fromswitcherooimportSwitch,handles,defaultclassMySwitch(Switch):@handles('foo')defhandles(x):returnx+1@defaultdefdefault(x):returnx-1
>>> MySwitch['foo'](1) 2 >>> MySwitch['bar'](1) 0
变化
1.0.0(2019年2月27日)
- 100%覆盖率检查和自动发布。
0.2.0(2018年12月13日)
- 使用子类模式时处理子类。
0.1.0(2018年11月24日)
- 初次发布。