闭包突破作用域

 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
原文地址:https://www.cnblogs.com/BKY88888888/p/11266127.html