python 闭包_Python 闭包

所谓闭包,有2中定义。

1.子函数可以使用父函数中的变量

2.一个变量引用者未释放的可执行的代码块。

对第1点先举例:

def line_conf():

def line(x):

return 2*x+1

print(line(5)) # within the scope

line_conf()

print(line(5)) # out of the scope

#NameError: name 'line' is not defined

第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))

对于闭包用于处理一些非常特殊的问题。

比如说,我的函数返回一个带有变量的方程。在Java,c++这种语言就很难实现了。

尤其是java里面,函数返回的,只能是一个结果,这个结果必须是一个对象或者是一个值。

通过闭包,这个问题就很好地解决了。

一个函数和它的环境变量合在一起,就构成了一个闭包(closure)。在Python中,所谓的闭包是一个包含有环境变量取值的函数对象。环境变量取值被保存在函数对象的__closure__属性中。比如下面的代码:

def line_conf():

b = 15

def line(x):

return 2*x+b

return line # return a function object

b = 5

my_line = line_conf()

print(my_line.__closure__)

print(my_line.__closure__[0].cell_contents)

__closure__里包含了一个元组(tuple)。这个元组中的每个元素是cell类型的对象。我们看到第一个cell包含的就是整数15,也就是我们创建闭包时的环境变量b的取值。

一个实际中的闭包case:

def line_conf(a, b):

def line(x):

return a*x + b

return line

line1 = line_conf(1, 1)

line2 = line_conf(4, 5)

print(line1(5), line2(5))

ref:作者:Vamei 出处:http://www.cnblogs.com/vamei

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值