30. 闭包
首先理清几个关系。
- 函数式编程
- 面向对象编程 : 对象
- 面向过程编程 : 函数
对象和函数都是一种逻辑方式来组织代码,为了提高可重复利用性(reusability)。
而闭包作用和对象和函数一样。python的闭包是函数对象为基础实现的。
1. 函数对象的作用域
函数是由def定义的,其作用域与def的层级相同
def line_conf(): # within the scope begin
def line(x): # within the scope
return 2*x+1 # within the scope
print(line(5)) # within the scope end
2. 闭包
函数作为一个对象,可以作为另外一个函数的返回结果。
这种把函数作为参数传递给其他函数,得到的函数语句与执行环境一起称为闭包。
def line_conf():
def line(x):
return 2*x+1
return line # return a function object my_line = line_conf() # 把返回的函数对象保存给一个变量,变量就变成一个函数了
print(my_line(5))
环境变量 在一个函数之外定义的,高层级的变量就是它的环境变量。
闭包
一个包含有环境变量取值的函数对象。
闭包的__closure__属性保存着环境变量的取值,是一个元组。
print(myline.__closure__) #查看__closure__ 的值
print(myline.__closure__[0].cell_contents) #把环境变量的值赋给闭包函数
def line_conf(a, b):
def line(x):
return a*x + b
return line line1 = line_conf(1, 1) #y=x+1
line2 = line_conf(4, 5) #y=4x+5
如上,函数与环境变量a和b构成闭包,然后可以直接轻松构造任意直线。
每次只需要变换a和b的值,提高了代码的可重用性。
3. 闭包与并行计算 http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html
不懂???