闭包突破作用域
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