Python:根据参数值调用函数

时间:2015-08-02 22:55:27

标签: python python-decorators

从我的主代码中,我想调用函数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"

我认为可以使用装饰器,但我对装饰器知之甚少。

2 个答案:

答案 0 :(得分:3)

if声明有什么问题吗?

def X(v):
    if v == "a":
        Y(v)
    elif v == "b":
        Z(v)    

答案 1 :(得分:0)

最简单的方法是dealtype来电XYZ将更多地是一个调度程序,而不是一个装饰器,它与您拥有的一样(直接调用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或普通内容,然后重新开始。