根据输入选择特定函数的最有效方法

-1 投票
1 回答
617 浏览
提问于 2025-04-18 00:20

我有一组函数:func1、func2、func3,直到funcN。根据用户的输入,只会使用其中一个函数,比如如果用户输入'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 个回答

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变量实际上是一个数字序列中的数字,列表非常好用;而字典则适合其他任何可以被哈希的东西,比如字符串。

撰写回答