python装饰器的用法及讲述

本文探讨了Python装饰器的基本原理和常见用途,如授权和日志记录。通过示例解释了如何使用functools.wraps保持被装饰函数的元信息。进一步,介绍了带参数的装饰器,展示了如何创建接受参数的装饰器。装饰器在Python中扮演着功能扩展的角色,允许在不修改原函数代码的情况下增加额外功能。
摘要由CSDN通过智能技术生成

常规的装饰器写法:

image-20211122160455185

较为精简的装饰器写法:

image-20211122160506229

但是在返回 a_function_requiring_decoration函数名字时,会出现以下错误:

image-20211122160634452

这并不是我们想要的!Ouput输出应该是"a_function_requiring_decoration"。这里的函数被warpTheFunction替代了。它重写了我们函数的名字和注释文档。幸运的是Python提供给我们一个简单的函数来解决这个问题,那就是functools.wraps。我们修改上一个例子来使用functools.wraps:

 

python装饰器的应用:

授权(Authorization):

image-20211122160737545

日志(logging):

 说到这里,其实python装饰器的作用就不言而喻,其看似花里胡哨,实则就是起到包装函数A的作用,当满足某种要求时去执行一个特定的函数B或者功能,之后退出函数B去继续执行函数A。

接下来看下更加复杂的情况:

带参数的装饰器:

来想想这个问题,难道@wraps不也是个装饰器吗?但是,它接收一个参数,就像任何普通的函数能做的那样。那么,为什么我们不也那样做呢? 这是因为,当你使用@my_decorator语法时,你是在应用一个以单个函数作为参数的一个包裹函数。记住,Python里每个东西都是一个对象,而且这包括函数!记住了这些,我们可以编写一下能返回一个包裹函数的函数。

image-20211014165648227

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之所向521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值