装饰器装饰后,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

//img.mukewang.com/szimg/5da9826709ff4f0609640894.jpg

主要原因是 warpper 仅仅运行了 add ,但是没有接收 add 返回的值

而这里是 使用 wrapper 对 add 进行包裹,所以不能直接 return func()(后面的代码就无法运行)

所以,用 res 接收 func 即 add 返回的值,在 wrapper 的最后返回这个值即可。

0
1
bobby
正解。
2019-10-20
共1条回复

Tornado从入门到进阶 打造支持高并发的技术论坛

异步IO并发编程/Form,ORM/aiomysql、peewee-async/epoll

593 学习 · 350 问题

查看课程