任务是使用装饰器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次,而不调用它。为什么会这样呢?
发布于 2018-09-28 11:12:56
因为当你这样做:
@my_decorator()
def printer_hp():
...它相当于:
printer_hp = my_decorator()(printer_hp)由于my_decorator()返回wrapper,因此它相当于:
printer_hp = wrapper(printer_hp)wrapper所做的就是调用给定的函数4次,这就是为什么printer_hp被立即调用4次的原因。
https://stackoverflow.com/questions/52553954
复制相似问题