重在理解嗷,别去背
在作用域中去寻找相关的变量
函数的嵌套
函数在执行去寻找函数的时候
也是去执行我们在之前所定义的相关的规则的
优先是在自己的作用域中去寻找相关可以去关联的函数
没有的话就去上一级作用域中去寻找新的函数
当我们去执行某个函数的相关的调用的时候
我们要去确定的就是确定好这个函数的相关的作用域
定义的函数名和我们原本的函数名是有冲突的
函数嵌套:分析作用域内存处理过程
python代码就是从上到下的逐行是进行操作的
我们重要的是要去明白,当我们在创建这个函数的时候
我们这个作用域之间的关系之间的相关的调用
并要要明白这个之间关联的这个区域是否是创建了起来
这样的话
这个对于函数之间的分析就会变得比较 的清晰
三句话搞定作用域
1.优先是在自己的作用域中去寻找的,自己没有的就去上级作用域
2.在作用域中寻找值的时候,要确保此次值是什么
3.分析函数的执行,要确定函数的作用域(函数之间的嵌套)
闭包就是函数嵌套的提升版
闭包,简而言之就是将数据封装在一个包(区域之中),当我们使用的时候再去里面去取这个包
(其本质上就是基于这个函数的相关嵌套搞出来的一个特殊的嵌套)
闭包的应用场景
1.封装数据防止这个污染到全局
供其他的多个函数去进行调用
2.封装数据到一个包里面,使用时再去取
这样的话就会节省空间,这样的话使得我们就是会帮助我们提高了效率
python闭包案例
特定的相关的场景
多线程下载视频
在函数的内部维护了一个相关的作用域
python中的装饰器
类似于Java中的spring的注解
闭包和函数的嵌套
@函数名
def xxx():
pass
pytho内部会自动的执行。函数名xxx,执行完了之后
就会将这个结果赋给xxx
xxx=函数名
基于python的@语法和函数的闭包
将函数赋值给一个新的函数(内层函数)
执行函数的时候,再将内层的函数中执行闭包的原函数
让不修改函数的调用的方式和函数的本身,添加函数原本的功能
python装饰器模块代码
def outer(origin):
def inner(*args,**kwargs):
# 执行前
res=origin(*args,*kwargs)
# 执行后
return res
return inner
@outer
def func():
pass
func()