java闭包lambda,(lambda)函数闭包捕获了什么?

这是一个新的例子,它突出了闭包的数据结构和内容,以帮助澄清封闭上下文何时被“保存” .

def make_funcs():

i = 42

my_str = "hi"

f_one = lambda: i

i += 1

f_two = lambda: i+1

f_three = lambda: my_str

return f_one, f_two, f_three

f_1, f_2, f_3 = make_funcs()

什么是关闭?

>>> print f_1.func_closure, f_1.func_closure[0].cell_contents

(,) 43

值得注意的是,my_str不在f1的封闭中 .

f2的关闭是什么?

>>> print f_2.func_closure, f_2.func_closure[0].cell_contents

(,) 43

注意(从内存地址)两个闭包包含相同的对象 . 因此,您可以开始将lambda函数视为具有对范围的引用 . 但是,my_str不在f_1或f_2的闭包中,并且我不在f_3的闭包中(未显示),这表明闭包对象本身是不同的对象 .

闭包对象本身是同一个对象吗?

>>> print f_1.func_closure is f_2.func_closure

False

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值