Skip to content

Commit 6e87bf9

Browse files
authored
Update Python变量作用域与闭包.md
1 parent f319c37 commit 6e87bf9

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

studynotes/Python变量作用域与闭包.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
b = 1
2626

2727
#### 自由变量
28-
**嵌套函数中,内部函数需要引用外部函数中的局部变量,这个时候直接引用变量c,python解释器在内函数的作用域中找不到变量c的声明,就会报错,需要通过nonlocal关键字来声明变量c为自由变量。**
28+
**嵌套函数中,内部函数需要引用(并修改)外部函数中的局部变量,这个时候直接引用变量c,python解释器在内函数的作用域中找不到变量c的声明,就会报错,需要通过nonlocal关键字来声明变量c为自由变量。**
2929

3030
def f3():
3131
c = 2
@@ -37,3 +37,13 @@
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+

0 commit comments

Comments
 (0)