装饰器之前要先说说函数名()和函数名的区别
def test():
print(2)
return 2
test()是返回函数值,所以是可以赋值给变量的。比如a=test()。
test是调用函数,在scrapy里有很多的callback=self.parse
,就是调用具体函数。
装饰器是由里外两层函数,一般里面的函数是主函数,比如网页里各个网页,外层函数是里层函数执行前后要执行的函数,比如看网页之前要看你登陆没有这种。
通用格式是:
def outer_func(func):
def inner_func(*args, **kwargs):
#dosomething before the actual func
result = actual_func(*args, **kwargs)
#dosomething with resule before the actual func
return result
return inner_fun
调用是这样的
@outer_func
def actual_func(*args, **kwargs):
#blalala...
actual_func()
如果要传参给外层函数则是这样的:
def outer_func(decorator_args):
def args_func(func):
def inner_func(*args, **kwargs):
#dosomething before the actual func
result = actual_func(*args, **kwargs)
#dosomething with resule before the actual func
return result
return inner_func
return args_func
@outer_func(decorator_args)
def actual_func(*args, **kwargs):
#blalala...