闭包
1.函数引用
def test():
print("*"*30)
test()
aaa=test#引用函数
print("-"*40)
aaa()#通过引用调用函数
print(id(test))
print(id(aaa))
2. 闭包
在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
def test(a,b):
def line(x):
return a*x+b
return line
line1=test(1,1)
print(line1(5))
line2=test(2,3)
print(line2(4))
print(line1(5))#再次调用line1,并不需要传参a和b
这个例子中,函数line与变量a,b构成闭包。在创建闭包的时候,我们通过test的参数a,b说明了这两个变量的取值,这样,我们就确定了函数的最终形式(y = x + 1和y = 2x + 3)。我们只需要变换参数a,b,就可以获得不同的直线表达函数。由此,我们可以看到,闭包也具有提高代码可复用性的作用。
如果没有闭包,我们需要每次创建直线函数的时候同时说明a,b,x。这样,我们就需要更多的参数传递,也减少了代码的可移植性。