1. 程式人生 > >列表推導式+lambda+for(Python)

列表推導式+lambda+for(Python)

以下程式碼將輸出什麼?

def testFun():
    temp = [lambda x : i*x for i in range(4)]
    return temp

for everyLambda in testFun():
    print (everyLambda(2))

腦中默默一想,這還用說麼,肯定是:

0 2 4 6

最後一看答案,竟然是:

6 6 6 6

說明:

    當任何 testFun() 返回的函式被呼叫,在那時,i 的值是在它被呼叫時的周圍作用域中查詢,到那時,無論哪個返回的函式被呼叫,for 迴圈都已經完成了,i 最後的值是 3,因此,每個返回的函式 testFun 的值都是 3。因此一個等於 2 的值被傳遞進以上程式碼,它們將返回一個值 6 (比如: 3 x 2)。