Python 基于输入选择特定函数的最有效方法
我有一个函数集合:func1,func2,func3。。。funcN。根据用户输入,仅使用1个函数,例如,如果用户输入“1”,则仅使用func1。到目前为止,我所做的是将这些函数放在一个分支中:Python 基于输入选择特定函数的最有效方法,python,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): i
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...
...
显然这是没有效率的。当类被实例化时,例如functionemploymentmyfunc('1')
,所有函数的定义都被涉及。如果调用myfunc.function_以_使用,它将遍历所有分支,这是不可取的。我想做的是:
实例化类FunctionEnsemble
后,会选择函数,而不会触及不需要的函数
如何有效地做到这一点?非常感谢。Python函数是一流的对象;您可以将它们放在列表中:
functions = [None, func1, func2, func3, ...]
functions[int(self.function_to_select)]()
或在字典中:
functions = {
'selection1': func1,
'selection2': func2,
'selection3': func3,
}
functions[self.function_to_select]()
如果您的
函数\u to_select
变量实际上是序列中的一个数字,则列表非常有用。字典适用于任何其他可散列的内容(如字符串)。谢谢,字典方法很有前途。但是我不认为我可以把这本字典放在uu init_uu(…)函数中。我猜我必须把这本字典放在函数_to_use(self)下。@Void:这些全局函数或绑定方法是在self
上吗?@Void:对于全局函数,我也会将字典创建为全局函数。对于方法,我会在\uuuu init\uuuu
中创建字典,这样我就可以访问self
从中获取绑定的方法,然后将字典存储在self
上。函数不是全局函数。我试着这样做:def_uuuinit_uuuu(self,输入):funcdict={}funcdict['1']=func1 funcdict['2']=func2
,def func1(self):blablablabla
,我偶然发现了这个错误:全局名称'func1'未定义
@Void:如果函数是方法,那么您想存储self.func1
,等等。