因为装饰器必须接收一个函数当做参数,所以不可以直接把被装饰函数的参数传递给装饰器.
装饰器就是一个普通的函数,回顾
def my_decorator(func):
print("I am an ordinary function")
def wrapper():
print("I am function returned by thedecorator")
func()
return wrapper
因此,同样可以像普通函数一样调用装饰器,而不用@
def lazy_function():
print("zzzzz")
调用,
decorated_function =my_decorator(lazy_function) ##后面加()就会输出整个装饰完的结果
输出
I am an ordinaryfunction
执行下面的代码段:
@my_decorator
def lazy_function():
print("zzzzz")
同样输出
I am an ordinaryfunction
和"my_decorator"一样只是被调用.所以当你用@my_decorator你只是告诉Python去掉用被变量my_decorator标记的函数.并没有调用要装饰的函数。
<