【发布时间】:2020-04-15 16:14:35
【问题描述】:
我一直在尝试使用 Python 中的不同类型的装饰器,但我发现很难理解参数化装饰器。 装饰器接受可调用对象并返回可调用对象(在我的情况下可调用函数是一个函数) 在以下代码中:-
def check_non_negative(index):
def validator(f):
def wrap(*args):
if args[index]<0:
raise ValueError(
'Argument {} must be non negative.'.format(index))
return f(*args)
return wrap
return validator
@check_non_negative(1)
def create_list(value,size):
return [value]*size
create_list('a',3)
在这里,我看到 check_non_negative 不是根据定义的装饰器,而是表现得像一个(在运行期间验证器是实际的装饰器)。 check_non_negative 接受一个整数而不是可调用的,但它的行为类似于装饰器。谁能解释一下原因?
【问题讨论】:
-
check_non_integer在哪里? -
抱歉错字,已更正编辑
-
stackoverflow.com/questions/739654/… 是否有帮助(滚动到“将参数传递给装饰器”)?