天天看點

分析一個閉包函數

分析一段代碼

先說最下面的f1,f2,f3=counrt()

f1, f2, f3 = count() 相當于 [f1, f2, f3] = [f,  f, f] 

相當于 f1 = f 

f2 = f 

f3 = f

注意這裡是将函數f添加到了fs中,而不是f傳回的值,可以嘗試執行指令:

可見傳回的是一個由三個函數組成的list。 是以當執行代碼

時,将count包含的三個函數按索引順序分别賦給f1, f2, f3,而此時i=3,是以函數計算結果全部為9.

在python中一切皆對象,而變量i隻有一個,在三次循環中,它指向的對象變化了而已,而函數f1,f2,f3在實際執行的時候i指向的那個位址的實際存放資料已經變為3了,是以三次結果都是一樣的。

fs.append(f)這裡的f隻是指針  不是函數  是以不執行  等到什麼時候用什麼時候執行 是以在for循環3次之後i變成了3  f總是在所有的執行完了才會去調用  因為它被放在【】中

不管調用幾次count  他其中的for已經執行3次  i已經變成3是以此時執行f函數   使用的當然是3

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1769485