【发布时间】:2019-08-27 11:27:24
【问题描述】:
我在一个模块中有一系列函数,例如
def some_func1(param1, param2): pass
def another_func(param1, param2): pass
我想要最简单的方法将它们添加到调用函数列表中,然后通过过滤器在某个点调用它们中的一些,并带有参数。我尝试使用装饰器添加到函数列表中,如下所示:
all_func = {}
def decorator(filter):
def function_decorator(func):
def wrapped(*args, **kwargs):
return func(*args, **kwargs)
return wrapped
all_func[filter] = function_decorator
return function_decorator
@decorator(filter='1')
def some_func1(param1, param2): pass
@decorator(filter='2')
def another_func(param1, param2): pass
@decorator(filter='3')
def another_big_func(param1, *arg): pass
然后在使用带有过滤器的循环时,调用匹配过滤器的函数:
arg1 = some_obj
arg2 = another_obj
for i in range(3, 4):
func = all_func.get(i)
func(arg1, arg2)
也就是说,在添加一个函数的时候,我只是规定了一个新的过滤器值,并不关心我需要在某个地方注册其他东西,然后我在这个过滤器上调用它们
但是出了点问题,在all_func.get (i) 的时候我得到一个function_decorator,不是一个函数,我不明白如何用给定的参数调用它。
我以前没有使用过装饰器,也许我误解了这个概念。
【问题讨论】:
-
你的意思是像宏记录吗??
-
对不起,我不知道宏记录是什么。这段代码是一个大型 python 项目的一部分,所需的函数列表被传递给另一个类,这些函数将被调用
-
@ΦXocę웃Пepeúpaツ:不,不像宏。
-
请注意,您的
all_func对象是字典,而不是列表,并且在使用字符串注册函数然后使用整数查找函数时,您将找不到函数。但是,这可能只是创建问题时的翻译错误。