python装饰器

本文深入探讨Python中的装饰器和闭包概念,解释如何利用它们在不修改原函数的情况下添加新功能。装饰器作为闭包的一种应用,通过内嵌函数实现对原有函数或类的增强。

作用:在不改变原来对象的情况下给不同函数或类插入相同的功能。

理解装饰器必须先知道闭包和内嵌函数。

一、内嵌函数

 在一个函数中定义了另外一个函数。这里不进行过多说明。

 

二、闭包

将组成函数的语句和这些语句的执行的环境打包到一起得到的对象。

如果调用函数A,这个函数A返回一个函数B。这个被返回的函数就叫闭包。在调用A的时候,传的参数叫做自由变量。当内嵌函数使用自由变量的时候,当外层函数被使用结束,自由变量仍然存在(因为闭包在使用,不会被收回)。

例子:

funy则为闭包,x为自由变量。

python是面向对象的语言,一切物体皆为对象,包括函数和类所以可以当做返回值返回或者当做参数调用

三:装饰器

实现方法:定义装饰器格式与普通函数相同,只是参数必须有函数或者类,在装饰器函数内部嵌套一个函数或者类,并在执行该函某些功能前后或者中间使用参数函数。最后返回嵌套函数(闭包)。

构造:在需要被修饰的函数或者类前放“@装饰器名”

装饰器和闭包的关系:装饰器就是闭包的应用,只是装饰器传递的参数是函数或者类。

例子:

执行效果:

func是需要被装饰的函数,做为参数传到deco装饰函数中,并在嵌套函数_deco调用。函数传出一个闭包替代需要被修饰的函数func,完成装饰的功能。

当用装饰器去装饰带参数的函数值,内嵌函数的参数和返回值要和被装饰的函数相同。

用装饰器去装饰类也是一样的:

例子:

定义装饰类的装饰器:decorate_Pos(),在装饰器内部定义一个类InnerClass并当做返回值返回,则该闭包会代替需要被装饰的类。原来只能打印两个坐标通过装饰后可打印三个。被装饰后的类的调用方法和原来一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值