任务是使用装饰器调用一个函数4次。解决方案是:
def my_decorator (func):
def wrapper():
func()
func()
func()
func()
return wrapper
@my_decorator
def printer_hp():
print('I am printer HP 4700 LaserJet')
return 0
printer_hp()
但是,如果我将 func 移至包装函数args并在@my_decorator的括号中加上括号>,
def my_decorator ():
def wrapper(func):
func()
func()
func()
func()
return wrapper
@my_decorator()
def printer_hp():
print('I am printer HP 4700 LaserJet')
return 0
该函数自动调用4次,而无需在主程序中调用它。 为什么会这样?
答案 0 :(得分:3)
因为这样做:
@my_decorator()
def printer_hp():
...
等效于:
printer_hp = my_decorator()(printer_hp)
由于my_decorator()
返回wrapper
,因此它等效于:
printer_hp = wrapper(printer_hp)
wrapper
的作用是调用给定函数4次,这就是为什么printer_hp
立即被调用4次的原因。