闭包

闭包

定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包;

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()()()
原文地址:https://www.cnblogs.com/songzhixue/p/9250480.html