Python 闭包和装饰器

不修改函数代码时,通过闭包和装饰器,能够改变函数的功能。

闭包

每个闭包调用时,是创建了一个新的内存空间的。
给独有的数据。

一个例子:计算 一条 线上的y值,k,b,x都可变。

用面向对象的方法会 浪费资源。会继承很多 object 的内容,比较沉重。
在这里插入图片描述
闭包是,函数里面嵌套有函数,往往内部函数会用到外部函数的参数。
用闭包的方式,占用内存资源少。
在这里插入图片描述
匿名函数的介绍: lambda
https://blog.csdn.net/weixin_43790276/article/details/90730797
在这里插入图片描述

可以加 nonlocal 来使得内部的函数 可以使用 外部函数的变量。
在这里插入图片描述

装饰器

函数名 也是 变量名。
利用了闭包来实现装饰器。

在这里插入图片描述
装饰器的实现原理。 语法糖:@set_func 等价于 test1 = set_func() ;也就是说指向了增加了内容的代码块。
在遇到 @set_func ,就会执行,来装饰好这个函数。
在这里插入图片描述
对于有 定长 参数的情况:
在这里插入图片描述

用装饰器装饰多个函数。
在这里插入图片描述

对不定长 参数 的函数 进行 装饰:
在闭包里 用 *args 和 **kwargs 来接收参数。
在这里插入图片描述

对 有 返回值的函数 使用 装饰器。
在这里插入图片描述

经过以上的逐步 演进,上面这一个 就是 通用装饰器。

多个装饰器 装饰 同一个函数

装饰的顺序是 从 靠近函数的开始往上一次装饰,在执行的时候,会按从上往下装饰的顺序开始执行。

在这里插入图片描述
用类对函数进行装饰: 还可以扩展,类名后加调用等可以先不了解。
在这里插入图片描述

装饰器的参数:
在加一层来接收装饰器的参数,在调用时@set_level(10) 时,会返回一装饰器,再用这个装饰器装饰函数。
在这里插入图片描述

小例子:
用装饰器来完成 路由映射
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值