闭包

  1. 闭 内部的函数
  2. 包 包含了对外部函数作用域中变量的引用
  3. 判断闭包函数的方法__closure__

    输出的__closure__有cell元素:是闭包函数
    输出的__closure__为None:不是闭包函数

闭包的作用:

就是能够引用外部函数的变量,并且可以保证外部函数的变量控制在一个局部作用域中

1
2
3
4
5
6
7
8
9
10
11
12
13
#闭包嵌套
def wrapper():
money = 1000
def func():
name = 'eva'
def inner():
print(name,money)
return inner
return func

j = wrapper()
i = j()
i()

重要概念

命名空间:

一共有三种命名空间从大范围到小范围的顺序:内置命名空间、全局命名空间、局部命名空间

作用域(包括函数的作用域链):

调用时,如果在自己的空间内有,就用自己的。如果没有就使用大范围的。不能从大范围中用小范围的。

函数的嵌套:

嵌套调用
嵌套定义:定义在内部的函数无法直接在全局被调用

函数名的本质:

就是一个变量,保存了函数所在的内存地址

闭包:

内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数