File tree Expand file tree Collapse file tree 1 file changed +11
-1
lines changed
Expand file tree Collapse file tree 1 file changed +11
-1
lines changed Original file line number Diff line number Diff line change 2525 b = 1
2626
2727#### 自由变量
28- ** 嵌套函数中,内部函数需要引用外部函数中的局部变量 ,这个时候直接引用变量c,python解释器在内函数的作用域中找不到变量c的声明,就会报错,需要通过nonlocal关键字来声明变量c为自由变量。**
28+ ** 嵌套函数中,内部函数需要引用(并修改)外部函数中的局部变量 ,这个时候直接引用变量c,python解释器在内函数的作用域中找不到变量c的声明,就会报错,需要通过nonlocal关键字来声明变量c为自由变量。**
2929
3030 def f3():
3131 c = 2
3737
3838#### 由上可见,函数中要引用作用域之外的变量(不可变变量),如果是全局变量,可以通过global先声明后引用。如果是非全局变量,可以通过nonlocal关键字声明使用。
3939## 二、闭包
40+ ** 闭包:引入了自由变量的函数就是闭包。这个被引入的自由变量和这个函数一同存在,即使这个变量已经离开了创造它的环境也不例外。** (闭包中的自由变量,有点类似类中的属性)<br >
41+ <br >
42+ 一般对函数的理解:函数再被调用的时候,会在栈上创建其执行环境,初始化其中定义的变量和外部传入的参数,以便函数执行下一步的操作。当函数执行完成,并返回函数结果后,函数之前栈内存便会被销毁,函数中的临时变量以及存储的中间计算结果都不会保留。每次调用执行函数,都会重新初始化函数的执行环境。<br >
43+ ** 闭包是另一种情况,外部函数发现,自己的临时变量,会在将来的内部函数中用到,外部函数在自己结束并返回内部函数的同时,会把外部函数的临时变量送给内函数绑定在一起,所以,外部函数结束了,但是调用内函数的时候仍可以使用外部函数的临时变量(或者说是内部函数的自由变量)。**
44+
45+ ![ ] ( https://github.com/daacheng/PythonBasic/blob/master/pic/bibao.png )
46+
47+
48+
49+
You can’t perform that action at this time.
0 commit comments