###为什么装饰器需要写一个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
为了传参吧。现在now()没有参数,所以不用那个wrapper也行。。。
now()
wrapper
你在定义now 和调用now之间打印几条输出你就发现问题了 @log是马上执行的,但是修饰器的目的是在目标函数执行前后插入逻辑
Sign in to make a reply
用户2652483675
###为什么装饰器需要写一个wrapper函数? def log(func): def wrapper(args, **kw): print('call %s():' % func.name) return func(args, **kw) return wrapper
上面这段代码直接写成下面这样行不行?
测试一下:
输出: call now: 2018 now