闭包
定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包;
1 def outer(): 2 x = 10 3 def inner(): #条件一 inner就是内部函数 4 5 print(x) #条件二 引用外部环境的一个变量 6 7 return inner #结论:内部函数inner就是一个闭包 8 9 outer()() #调用outer时会返回inner
关于闭包:闭包=内部函数+定义函数时的一个环境
以形参的方式传入x的值
1 def outer(x): 2 3 def inner(): #条件一 inner就是内部函数 4 5 print(x) #条件二 引用外部环境的一个变量 6 7 return inner #结论:内部函数inner就是一个闭包 8 9 outer(20)() #调用outer时会返回inner
补充:
1 name = "老王" 2 def foo(): 3 name = "xiaoming" 4 def bar(): 5 name = "xiaowang" 6 print(name) 7 def tt(): 8 global name 9 print(name) 10 return tt 11 return bar 12 age1 = foo() #调用foo函数得到返回值bar,拿到bar的内存地址 foo() 13 age2 = age1() #调用bar函数,打印"xiaowang",得到返回值tt,并拿到tt的内存地址 foo()() 14 age3 = age2() #调用tt函数,将声明的全局变量打印出来 foo()()() 15 foo()()()