闭包及其应用
1、闭包的概念
闭包的概念比较晦涩难以理解,我是这么定义闭包的:
闭包 是这样的函数,它嵌套在另一个函数中,并且由其所嵌套的函数返回该函数的引用。
下面通过一个具体的例子来理解闭包的概念
def line(a,b):
def line_inner(x):
return a*x+b
print(line_inner)
return line_inner
在这个例子中,函数line_inner(x)嵌套在函数line(a,b)中,并且,函数line(a,b)的返回值是函数line_inner的引用,这样的函数line_inner就是一个 闭包 。
闭包满足以下三个条件:
- 嵌套在函数里面
- 闭包中的变量含有外部函数的参数
- 外部函数的返回值是内部函数的引用
下面通过一行代码来看看返回的函数引用到底是神马
print(line(1,2))
输出结果是:
<function line.<locals>.line_inner at 0x000001F27AC82620>
可以看出,外部函数line返回的是内部函数line_inner的引用(内部的引用地址)
2、闭包的使用
那么,闭包怎么使用呢?
通过上面的例子,外部函数返回了内部函数的引用
要想使用闭包,就要利用返回的函数引用
把这个引用保留下来,就可以当做内部函数来使用了
line0 = print(line(1,2))
line0(3)
这样,就可以使用闭包了
3、闭包的应用
看起来闭包比一般的函数还要复杂,难以理解
那么,还为什么要学习闭包呢?
因为,闭包在数据处理方面高效便捷性就体现出来了
下面举个例子:
如果想计算:y = a * x + b 的值
利用一般函数计算要传递三个参数