从我的主代码中,我想调用函数X而不考虑参数v。在后台,函数Y或Z基于v的值调用。
例如,主要代码是 -
i = X(v)
现在,如果v =“a”或v =“b”,则调用函数Y或Z.
def X(v):
pass
def Y(v):
# called if v="a"
def Z(v):
# called if v="b"
我认为可以使用装饰器,但我对装饰器知之甚少。
答案 0 :(得分:3)
if
声明有什么问题吗?
def X(v):
if v == "a":
Y(v)
elif v == "b":
Z(v)
答案 1 :(得分:0)
最简单的方法是dealtype
来电X
或Y
。 Z
将更多地是一个调度程序,而不是一个装饰器,它与您拥有的一样(直接调用X
)。查看@ ezig的代码答案。
X
用于更改某个函数或其环境的某些内容,或者用于注册它 - 通常不会选择不同的函数;虽然一个值得注意的例外是singledispatch,但引入了into Python3.4。
我自己的代码中singledispatch(使用名为simplegeneric的旧版本)的示例:
decorator
然后我可以在@simplegeneric
def float(*args, **kwds):
return __builtin__.float(*args, **kwds)
@float.register(timedelta)
def timedelta_as_float(td):
seconds = td.seconds
hours = seconds // 3600
seconds = (seconds - hours * 3600) * (1.0 / 3600)
return td.days * 24 + hours + seconds
@float.register(Time)
def Time_as_float(t):
return t.tofloat()
上调用float()
,自定义timedelta
s或普通内容,然后重新开始。