基于输入选择特定功能的最有效方法

时间:2014-03-28 16:16:15

标签: python

我有一组函数:func1,func2,func3,... funcN。根据用户输入,将仅使用1个功能,例如,如果用户输入'1',则仅使用func1。到目前为止,我所做的是将这些功能放在一个分支中:

class FunctionEnsembles:
    def __init__(self,select_funcion):
        self.function_to_select=select_function
    def function_to_use(self):
        if self.function_to_select=='1':
           func1...
        elif self.function_to_select=='2':
           func2...
        ...

显然这不高效。当类被实例化时,例如FunctionEnsemble myfunc('1'),涉及所有函数的定义。如果调用myfunc.function_to_use,它将遍历所有分支,这是不可取的。我想做的是: 在实例化类FunctionEnsemble后选择函数,而不触及不需要的函数。

如何有效实现这一目标?非常感谢。

1 个答案:

答案 0 :(得分:1)

Python函数是第一类对象;你可以把它们放在一个清单中:

functions = [None, func1, func2, func3, ...]
functions[int(self.function_to_select)]()

或在字典中:

functions = {
    'selection1': func1,
    'selection2': func2,
    'selection3': func3,
}

functions[self.function_to_select]()

如果您的function_to_select变量实际上是序列中的数字,则列表非常有效,字典对于任何其他可清除的字符(例如字符串)都很有用。