Python: 根据参数值调用函数

Python: Calling a function based on a argument value

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

我认为可以使用装饰器,但我对装饰器的了解不够

if 语句有什么问题吗?

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

最简单的方法是让 X 调用 YZX 将更像是一个调度程序而不是装饰器,它与您所拥有的相匹配(直接调用 X )。查看@ezig 对代码的回答。

decorators 用于更改函数或其环境的某些内容,或者注册它——通常不是选择不同的函数;尽管一个明显的例外是 singledispatch, introduced into Python3.4.

我自己的代码中的 singledispatch(使用称为 simplegeneric 的旧版本)示例:

@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()

然后我可以在 timedeltas、自定义 Times 或正常的东西上调用 float(),然后得到一个浮点数。