1 '''
2 概念:在函数体内定义的内部函数,并且该内部函数使用的外部函数的变量,
3 外部函数将内部函数作为返回值返回,该内部函数就叫做闭包。
4
5 优点:避免变量污染全局环境,我们可以在全局范围内间接使用局部变量。
6 缺点:数据会长期驻留在内存中,造成内存浪费,在IE浏览器中,极易崩溃,
7 所以请慎重使用。
8 '''
9 # 闭包 : 在函数内部定义一个函数,并且外部函数返回内部函数的函数名,
10 # 该方式可以称之为闭包。
11 # 一个返回函数的函数----闭包
12 def outer():
13 print("outer执行了")
14 def inner():
15 print("inner执行了")
16 return inner
17
18 res = outer() # res == outer() == inner
19 res()
20 # 整合写法
21 outer()()
22
23 def outer():
24 print("123")
25 def inner():
26 print(456)
27 return "heihei"
28 # 实际返回的是:内部函数的返回值
29 return inner()
30 res = outer()
31 print(res)
32
33 #
34 globalA = 100 # 全局
35 def closer():
36 eB = 200 # 闭包作用域
37 def inner():
38 iC = 300 # 局部
39 return iC
40 return inner
41
42 res = closer() # res === inner
43 a = res() # res() ==== inner()
44 print(a)
45
46
47
48 #
49 def outer():
50 num = 666
51 def inner():
52 nonlocal num
53 num += 1
54 return num
55 return inner
56 res = outer() # res == inner
57 a = res()
58 print(a) # 667
59 b = res()
60 print(b) # 668
61 print(res()) # 669
62
63 print(outer()()) # 667
64 print(outer()()) # 667
65 print(outer()()) # 667
66
67 # for i in range(3): # i=0 1
68 # num = 2
69 # for j in range(3): # j=0 1 2
70 # num += 1
71 # print(num) # 3 4 5
72 # print(num) # 5