Discuss / Python / 为什么装饰器需要写一个wrapper函数?

为什么装饰器需要写一个wrapper函数?

Topic source

###为什么装饰器需要写一个wrapper函数? def log(func): def wrapper(args, **kw): print('call %s():' % func.name) return func(args, **kw) return wrapper

上面这段代码直接写成下面这样行不行?

def log(func):
    print('call %s:' % func.__name__)
return func

测试一下:

 @log
def now():
   print('2018')
   print(now.__name__) 

输出: call now: 2018 now

昭_瀚_

#2 Created at ... [Delete] [Delete and Lock User]

为了传参吧。现在now()没有参数,所以不用那个wrapper也行。。。

你在定义now 和调用now之间打印几条输出你就发现问题了 @log是马上执行的,但是修饰器的目的是在目标函数执行前后插入逻辑


  • 1

Reply