关于python:基于输入选择特定函数的最有效方法

most efficient way to selection specific function based on input

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
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,它将遍历所有分支,这是不可取的。我想做的是:一旦类FunctionEnsemble被实例化,函数就会被选中,而不需要的函数则不会被触摸。

如何有效地实现这一目标?多谢。


python函数是一流的对象;您可以将它们放在一个列表中:

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

或者在字典里:

1
2
3
4
5
6
7
functions = {
    'selection1': func1,
    'selection2': func2,
    'selection3': func3,
}

functions[self.function_to_select]()

如果您的function_to_select变量实际上是一个序列中的数字,那么列表的工作效果很好,字典对于任何其他可散列的(如字符串)都很好。