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
提交
取消