r = f(i) ,得到的r 是1*1,還是j*j?
def?count(): ????fs?=?[] ????for?i?in?range(1,?4): ????????def?f(j): ????????????def?g(): ????????????????return?j*j ????????????return?g???????????????????? ????????r?=?f(i)??????????#這里r返回的是一個函數,函數內容是什么?【即:返回函數時,如何如何查看函數內容】????? ????????fs.append(r)???????????????????? ????return?fs??????????????????????????? f1,?f2,?f3?=?count() print?f1(),?f2(),?f3()
2020-01-09
首先在循環中的i作為的是f的實參,而f里面的g()使用的是f的形參j來定義函數,即這里的代碼實現的是從變動的實參過渡到不變的形參來定義內層函數。
2019-12-13
在這個函數中i是count函數的局部變量
當i= 1時,i指向了1,結果返回了函數的地址放在了fs的第一個位置。
當i = 2時,又將i 指向了2,函數地址返回到了fs的第二個位置上。
當i = 3 時,i 指向了3,然后返回了函數地址在fs的第三個位置。
所以當調用函數顯示的時候,i 已經是3,所以得到的結果是一樣的。
2019-12-13
這里count()方法返回一個list——fs,列表fs中放著3個函數,這些函數已經在count函數循環過程中動態生成,此時調用這些函數,其函數返回值都不會發生改變。
2019-12-11
得到的是1*1吧,這里用的閉包.我理解是這樣
2019-12-11
f(i)的返回值哦,你看f(i)的定義,在def fi 中,最后,返回的是一個g,g是什么呢,g就是一個返回來的函數對象,函數對象,就是一個函數的對象。函數對象并沒有被計算,所以不出結果,所以,返回的g(1),我這里只說了for循環的第一次,然后下一次就返回一個函數對象:g(2),再下一次for循環,返回一個g(3)。
如果我哪里理解錯了,請指正。新手。。。。