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 并返回该乘积作为结果。3
range
[m(9) for m in m()]
是一个列表推导式,它将创建一个列表,其中每个元素都是通过第一次调用而连续创建的,对于返回的列表中的m()
每个值,正如我们所见,它是一个 lambda 函数,它将其参数乘以 3,并使用参数调用该函数m
9 并获取结果 (27) 并将其附加到正在创建的新列表中。因此,我们最终得到一个包含 4 个元素的列表,所有元素都是 27, [27, 27, 27, 27]
,然后将其打印出来。
添加回答
举报
0/150
提交
取消