
正文
python中闭包的理解
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
闭包的三个条件:
1、函数(外函数)中定义了内函数;2、内函数使用了外函数的非全局变量;3、外函数最终返回的是内函数的引用。
简单闭包事例:
#outerfunc为外函数
def outerfunc(x):
y = 10 #x,y都是外函数的非全局变量 #innerfunc是内函数
def innerfunc(): #内函数使用了外函数的非全局变量
return x * y #外函数最终返回的是内函数的引用
return innerfunc
然后执行如下代码:
func = outerfunc(2)
func()
输出 20
因为外函数最终返回的是内函数的引用,所以变量func为内函数innerfunc的引用,
func(),变量后面加了括号,则是执行内函数,所以最终结果为20。
再看下面的例子:
def outerfunc(x):
def innerfunc(y):
return x * y
return innerfunc
func = outerfunc(2)
print(func(3))
print(func(4))
输出结果分别为6和8
print(func(3)):因为func是内函数的引用,参数2是外函数的变量,被内函数使用,而func(3)执行的是内函数,3是传给内函数的参数,所以结果为6
print(func(4))也是同样的道理。
上面的代码改下,如下:
def outerfunc(x):
def innerfunc(y):
return x
return innerfunc
func = outerfunc(2)
print(func(3))
print(func(30))
上面输出都是2
因为内函数只用到了外函数的变量
以上是本人的理解,有误望谅解,欢迎指正。





