我正在寻找一种更好的方法来调用基于Python中的变量的函数与使用if/else语句(如下所示).每个状态代码都有相应的功能
if status == 'CONNECT': return connect(*args, **kwargs) elif status == 'RAWFEED': return rawfeed(*args, **kwargs) elif status == 'RAWCONFIG': return rawconfig(*args, **kwargs) elif status == 'TESTFEED': return testfeed(*args, **kwargs) ...
我认为这将需要某种工厂功能,但不确定语法
getattr
我想你可能觉得很有用
import module getattr(module, status.lower())(*args, **kwargs)
执行此操作的规范方法是使用字典来模拟switch
或if/elif
.你会在SO上找到几个类似问题的问题.
将您的函数放入字典中,并将状态代码作为键:
funcs = { 'CONNECT': connect, 'RAWFEED': rawfeed, 'RAWCONFIG' : rawconfig, 'TESTFEED': testfeed } funcs[status](*args, **kwargs)
假设这些函数属于某个模块:
import module return getattr(module, status.lower()).__call__(*args, **kwargs)
你可以使用getattr稍微不同的接缝(在我看来更优雅的方式)
import math getattr(math, 'sin')(1)
或者如果导入功能如下所示
from math import sin
sin现在在命名空间中,所以你可以调用它
vars()['sin'](1)