首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

A32:高级特性

装饰器(Decorators)无参装饰器带参装饰器装饰器(Decorators)

装饰器,是修改其他函数的功能的函数

无参装饰器

假设现在线上有个函数

运行结果是:

现在领导要求,下个版本开始,需要先进行登录验证,获取到数据后,还要需要记录用户的操作日志。

在python中,有个神奇的功能,可以在不修改原函数的前提下,扩展修改原函数的功能。如下:

运行结果是:

通过运行结果,已经实现了在获取数据前先进行了登录,获取数据后,又进行的日志打印。

再看一下修改情况,发现原来的函数并没有修改,只是额外添加了一个函数。

分析函数:

wrapper函数接收一个函数对象作为入参

wrapper函数在内部定义了一个内部函数

(在inner函数中,先处理了登录,然后调用了传入的`main_func`函数,最后处理日志打印)。

然后wrapper函数返回一个内部函数。

在调用 的方式上,做了如下修改

先将get_data函数传递到wrapper函数中,获得内部函数inner,然后将inner赋值会给,如此一来,执行,便等同于执行

在python中,有种语法,叫装饰器,上面示例中,便可称为“装饰器”。我们可以用更加优雅的方式来调用装饰器,并且无需修改调用方式。

调用方式无需调整,原函数无需调整,只需添加一个装饰器,然后再原函数定义前,添加需要使用的装饰器即可。

带参装饰器

上面的例子,被修饰的函数没有带参数,装饰器本身也没有带参数。下面修改一下,让它们都可以带上参数。

运行结果如:

分析代码执行流程如下:

执行时:

先执行, 返回outer函数

执行,返回inner函数

执行

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180811G0BGP100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券