版权声明:转载请标明出处 https://blog.csdn.net/gymaisyl/article/details/83019368
定义:(重点在定义)
在外部函数里面定义一个内部函数,并且这个内部函数用到了外部函数的变量,那么将这个内部函数和用到的一些变量统称为闭包。
首先看一个闭包的实例:
def lines(a, b):
def line(x):
return a * x + b
return line
line1 = lines(1, 1) # 可以得到 直线1:y=x+1
line2 = lines(4, 5) # 可以得到 直线2:y=4x+5
print(line1(5))
print(line2(5))
我们只需要变换参数a,b,就可以获得不同的直线表达函数;通过这个闭包的实例,可以看出,闭包的一个好处是,提高代码的复用率。
修改外部函数中的变量:
def outer(num1):
def inner():
# nonlocal是闭包内部变量的声明:声明变量不是局部变量,这样下方的代码可以对外部函数传入的变量进行修改
nonlocal num1
num1 += 1
return num1
return inner
ret = outer(100) # 得到内部函数inner的指向
print(ret()) # 调用inner函数,并打印inner函数的返回值 结果为101
闭包和函数的区别:
-
闭包:在闭包中,既有函数,又有数据,而且数据是闭包里面独有的数据,与外界无影响;
-
函数:函数中,需要使用的全局变量,在一定程度上是受到限制的,因为全局变量不仅仅是一个函数使用,其他的函数也可能会使用到,一旦修改会影响到其他函数使用全局变量,所以全局变量不能随便修改从而在函数的使用中受到一定局限性。