闭包可以在函数外部或者其他函数内,访问本函数内的变量:
闭包可以使变量持久,常驻内存,又可以避免变量被外部修改
1 def func(): 2 name = "大傻子" #定义个name = "大傻子" 3 def func1(): 4 return name #把name返回给func1 5 return func1 #把func地址返回给func 6 7 def func2(): 8 name = func()() #把func1的返回值name = "大傻子" 赋值给新name 9 def func3(): 10 print(name) #打印新name = "大傻子" 11 print("哈哈") 12 return "嘻嘻" #返回字符串"哈哈"给func3 13 return func3 #返回func3的地址给func2 14 print(func2()) #调用func2,返回func3地址 15 print(func2()()) #调用func3,返回"嘻嘻"
结果对照:
1 大傻子 2 哈哈 3 嘻嘻
如何查看函数是否是闭包:(未粘贴上面代码)
1 print(func() .__closure__) #查看函数是否是闭包,,返回非None就是闭包 2 print(func2() .__closure__) #查看函数是否是闭包,,返回非None就是闭包
结果对照:
1 (<cell at 0x0000022D0785C888: str object at 0x0000022D0783BF90>,) 2 (<cell at 0x0000022D0785C888: str object at 0x0000022D0783BF90>,)