测开之路十一:作用域、闭包和修饰器

作用域

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G(Global) 全局作用域
B (Built-in) 内建作用域
locals()和globals()
local -> enclosing-> global -> build-in

闭包

1.闭包函数必须有内嵌函数
2.内嵌函数需要引用嵌套函数的变量
3.闭包函数必须返回内嵌函数

第一层def的参数为函数名,第二层def的参数为第一层传的函数需要的参数

 闭包用法:

1.直接调用

2.修饰器调用, 修饰器的本质是闭包

 

装饰器的作用就是为已经存在的对象添加额外的功能。
常用场景:插入日志、性能测试、事务处理、缓存、权限校验等

当一个函数有两个修饰器的时候,执行顺序为先执行靠近主函数的,再执行上面的装饰器,如:

很明显,从打印结果来看,是先执行了run2,再执行的run1

原文地址:https://www.cnblogs.com/zhongyehai/p/10747706.html