函数的嵌套及闭包
01.在一个函数中定义另一个函数的过程称为函数的嵌套。
- 嵌套函数的示例:
def outer():
def inner():
print('This is inner function!')
print('This is outer function')
inner()
result = outer()
- 函数有可见范围(作用域),内层的函数在函数外部不可见。
- 若要执行内层函数,可采用”return 内层函数”的方法返回函数对象。
02.在嵌套函数中,如果内层函数引用到了外层函数的自由变量,就称之为闭包。
- 自由变量指为在本地作用域中定义的变量,例如定义在嵌套函数中的外层函数中的变量。
- 嵌套函数中,若将函数以引用的方式赋值给一个变量,则该函数执行之后,其本地变量也不会销毁,比如:
def outer():
c = [0]
def inner():
c[0] += 1
return c[0]
return inner
foo = outer()
print(foo(), foo())
c = 100
print(foo())
- 当执行foo=outer()时,即创建了对象的引用,c的值在该引用中作为一个全局变量(只对foo生效)。
- 当foo对象存在时,则其引用中的变量不会销毁(c的值不销毁)。
- 第一次执行,c[0]的初始值为0;第二次执行,c[0]的初始值为1。
- 更改全局变量c的值,并不会影响引用中的c的值。
文档更新时间: 2020-09-20 17:19 作者:闻骏