装饰器装饰后,return 返回的值和原函数 return 返回的值不同
来源:11-2 python装饰器的原理详解

羁书贵公子
2019-10-18
老师您好,如图所示,在没有使用装饰器的时候,运行返回结果如下所示,add 内部print 3,下面 print返回了 add return 回来的值"hello"
3
hello
使用装饰器的时候,add 内部 print 3,但是下面 main 中 print 出来的结果不是 hello , 而是 None,如下所示
3
Cost 2.0031261444091797 seconds
None
不知道是装饰器的特性无法 return, 只能运行还是我代码上的问题。
写回答
1回答
-
羁书贵公子
提问者
2019-10-18
主要原因是 warpper 仅仅运行了 add ,但是没有接收 add 返回的值
而这里是 使用 wrapper 对 add 进行包裹,所以不能直接 return func()(后面的代码就无法运行)
所以,用 res 接收 func 即 add 返回的值,在 wrapper 的最后返回这个值即可。
012019-10-20
相似问题