1.什么是闭包?
闭包(closure)是函数式编程的重要的语法结构。
在程序的编写过程中,我们没有太多心思去顾虑各个变量是否冲突,所以有了闭包的方法。我个人理解闭包就是把原本要在全局声明的变量变成局部声明变量,这样在每个函数中我们可以声明和其他函数中名称相同的变量,当然在Python中普通函数也可以。
而两者的区别是:闭包函数的返回值和变量在函数调用过后不会释放掉,而普通函数就会释放掉,我们还可以在后续程序中随时调用和操作该函数的返回值。而且我们在函数内部声明的局部变量可以当作全局变量在函数外部进行操作和访问。
2.闭包有什么作用?
闭包可以用在许多地方。它的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在调用后被自动清除。
3.闭包的写法.
局部变量当作全局变量的体现:
拿一段程序来说
def outer(a,b):
def inner(c):
return a*c+b
return inner
outer1 = outer(2,3)
outer2 = outer(10,20)
print(outer1(5), outer2(10))
此时输出的结果为13和120
可见在调用函数时,我们在函数外部操作了outer函数内部的变量,此时该变量是以全局变量的形式存在的。
避免变量名称冲突的体现:
如下程序:
def outer():
a = []
def inner(msg):
a.append(msg)
print(a)
return inner
def outer1():
a = []
def inner1(msg):
a.append(msg)
return a
return inner1
a= outer()
a("人面桃花相映红")
a= outer1()
print(a("为伊消得人憔悴"))
在上述程序中,虽然程序末尾调用函数时,两个不同的函数把返回值都赋给了相同的变量a,但是在闭包函数中,这两个a是不冲突的,后来的a并不会像普通函数一样覆盖上面程序中的变量a,所以输出结果为 ['人面桃花相映红'],['为伊消得人憔悴']