首先给出闭包函数的必要条件:
- 闭包函数嵌套存在于函数体内
- 闭包函数必须引用外部变量(一般不能是全局变量),不一定要return
- 闭包函数必须作为对象被逐级return,直至作为主函数(最外层函数)的返回值
一、函数中的作用域
Python中函数的作用域由def关键字界定,函数内的代码访问变量的方式是从其所在层级由内向外的,如“热身”中的第一段代码:
-
def line_conf(a, b):
-
def line(x):
-
return a * x + b
-
return line
嵌套函数line中的代码访问了a和b变量,line本身函数体内并不存在这两个变量,所以会逐级向外查找,往上走一层就找到了来自主函数line_conf传递的a, b。若往外直至全局作用域都查找不到的话代码会抛异常。