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
调用 Y
或 Z
。 X
将更像是一个调度程序而不是装饰器,它与您所拥有的相匹配(直接调用 X
)。查看@ezig 对代码的回答。
decorator
s 用于更改函数或其环境的某些内容,或者注册它——通常不是选择不同的函数;尽管一个明显的例外是 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()
然后我可以在 timedelta
s、自定义 Time
s 或正常的东西上调用 float()
,然后得到一个浮点数。
在我的主代码中,我想调用一个函数 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
调用 Y
或 Z
。 X
将更像是一个调度程序而不是装饰器,它与您所拥有的相匹配(直接调用 X
)。查看@ezig 对代码的回答。
decorator
s 用于更改函数或其环境的某些内容,或者注册它——通常不是选择不同的函数;尽管一个明显的例外是 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()
然后我可以在 timedelta
s、自定义 Time
s 或正常的东西上调用 float()
,然后得到一个浮点数。