闭包
直接理解闭包,有点绕,所以我们逐步理解
1. 函数嵌套
一个函数里面, 定义了另一个函数.
外面的函数叫 外部函数, 里面定义的函数叫内部函数, 可以说外部函数 是内部函数的父 函数,
内部函数 是 外部函数的子函数.
注意, 内部函数中,可能还有它的内部函数, 注意层级关系
另外,同样的内部函数,可以定义多个.
1 def outer(): 2 def inner(): 3 print('内部函数执行') 4 return 5 #在外部函数中,执行内部函数 6 inner() 7 print('外部函数执行') 8 return
没有返回值,可以不写return, 写return 是为了更醒目知道, 函数结束的位置
当在程序主体 执行 outer() 时, 就会开始执行 outer函数, outer函数内部就会执行 内部函数inner
2. 内部函数,可以直接引用 外部函数的局部变量
1 def outer(): 2 x = 10 3 def inner(): 4 print('inner', x) 5 print('内部函数执行') 6 return 7 #在外部函数中,执行内部函数 8 inner() 9 print('外部函数执行') 10 print('outer', x) 11 return 12 13 outer() 执行外部函数
3. 外部函数的返回值, 返回内部函数名
1 def outer(): 2 x = 10 3 def inner(): 4 print('inner', x) 5 print('内部函数执行') 6 return 7 #在外部函数中,执行内部函数 8 inner() 9 print('外部函数执行') 10 print('outer', x) 11 return inner 12 13 f1 = outer() 14 print('利用外部函数返回的内部函数名,执行内部函数') 15 f1()
执行结果如下:
1 inner 10 2 内部函数执行 3 外部函数执行 4 outer 10 5 利用外部函数返回的内部函数名,执行内部函数 6 inner 10 7 内部函数执行
按如上, 1, 2, 3, 三部贯通下来,
inner 这个内部函数, 就是闭包函数.
当然,在外部函数outer内部, 也可以不调用 内部函数 inner