Python的装饰器原来是这么用的-续

关注我的微信公众号:pythonislover,领取python,大数据,SQL优化相关视频资料!~

Python大数据与SQL优化笔 QQ群:771686295

 

 

上篇文章说到Python的装饰器,文尾留了一个彩蛋,不知道大家有没有发现那段装饰器代码还有没有其他问题。

 

Python的装饰器原来是这么用的

 

今天给大家揭晓下。首先上代码

​​​​​​​

def add_log(func):    def wrapper(*args,**kwargs):        print('我们要加一些日志')        func(*args,**kwargs)    return wrapper
@add_logdef f1(name):    print('普通函数 %s' %name)
@add_logdef f2(name,age):    print('我是%s,我%s岁了' %(name,age))
f1('python')f2('java',10)
结果:我们要加一些日志普通函数 python我们要加一些日志我是java,我10岁了

 

上篇说到了我们的功能函数可能会有参数,而且不同的功能函数可能有不同的参数,所以我们加上了*args,**kwargs来接受,这样参数的问题就解决了(功能函数就是上文的f1(), f2())

 

那你有没有发现f1() ,f2()没有返回值呢? 就是return, 因为在Python里一个函数的结果可以赋值给一个变量,这就是一些皆变量的意思。

 

​​​​​​​

def add_log(func):    def wrapper(*args,**kwargs):        print('我们要加一些日志')        func(*args,**kwargs)        return     return wrapper
@add_logdef f1(name):    print('普通函数 %s' %name)    return 'python'
@add_logdef f2(name,age):    print('我是%s,我%s岁了' %(name,age))    return 'java'
s1=f1('python')s2=f2('java',10)print(s1)print(s2)

结果:我们要加一些日志普通函数 python我们要加一些日志我是java,我10岁了NoneNone

 

现在如果我把f1, f2赋值给变量s1 s2, 虽然f1,f2里面都有reture,但是结果是s1,s2全是None, 那我们怎么给函数加上返回值呢?

 

看下面

​​​​​​​

def add_log(func):    def wrapper(*args,**kwargs):        print('我们要加一些日志')        s=func(*args,**kwargs)        return s    return wrapper
@add_logdef f1(name):    print('普通函数 %s' %name)    return 'python'
@add_logdef f2(name,age):    print('我是%s,我%s岁了' %(name,age))    return 'java'
s1=f1('python')s2=f2('java',10)print(s1)print(s2)
结果:我们要加一些日志普通函数 python我们要加一些日志我是java,我10岁了pythonjava

 

其实很简单,大家看出我改了什么了吗?

就是两行

        s=func(*args,**kwargs)        return s

 

在装饰器里捕获下返回值,OK了,这样我们一个完整的Python装饰器就大功告成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值