为了账号安全,请及时绑定邮箱和手机立即绑定

有人可以一步步解释一下这个过程吗

有人可以一步步解释一下这个过程吗

慕斯709654 2023-07-18 16:33:37
def m():    return[lambda x:x*i for i in range(4)]print([m(9) for m in m()])我要一步步执行。
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

函数m返回 4 个函数的列表lambda。这些函数中的每一个都采用一个参数 ,x并返回一个值,该值是通过将该值乘以 来计算的i。其目的可能是分别为这 4 个 lambda 函数中的每一个i采用连续值 0、1、2 和 3(由函数生成)。range但是,这些 lambda 函数不会i在创建时进行复制,而是会i在调用时使用当前的值。当函数m返回 4 个 lambda 函数的列表时,具有来自函数i的最终值。因此,所有 4 个 lambda 函数都是相同的,并将其参数乘以 3 并返回该乘积作为结果。3range

[m(9) for m in m()]是一个列表推导式,它将创建一个列表,其中每个元素都是通过第一次调用而连续创建的,对于返回的列表中的m()每个值,正如我们所见,它是一个 lambda 函数,它将其参数乘以 3,并使用参数调用该函数m9 并获取结果 (27) 并将其附加到正在创建的新列表中。因此,我们最终得到一个包含 4 个元素的列表,所有元素都是 27, [27, 27, 27, 27],然后将其打印出来。


查看完整回答
反对 回复 2023-07-18
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信