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
因为内函数只用到了外函数的变量
以上是本人的理解,有误望谅解,欢迎指正。