Python第十一天

闭包

直接理解闭包,有点绕,所以我们逐步理解

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

猜你喜欢

转载自www.cnblogs.com/golzn2018/p/9506959.html