廖雪峰 python 教程中閉包例子的理解

2021-10-08 05:30:00 字數 750 閱讀 4235

閉包簡單來說就是內層函式引用了外層函式的引數,並最終返回內層函式這樣的一種結構。

這個結構有乙個特點,那就是函式不會立刻執行,要理解這個意思,其實就是理解 f 和 f() 的區別,f 不會執行函式而 f() 會執行函式,計算結果。

def count():

fs =

for i in range(1, 4):

def f():

return i*i

return fs

f1, f2, f3 = count()

你可能認為呼叫 f1(),f2() 和 f3() 結果應該是1,4,9但實際結果都是9。

因此注意:返回的函式是惰性的,不會立刻執行!

如果要引用迴圈變數的值怎麼辦,那就是讓 f 執行,具體就是:

def count():

def f(j):

def g():

return j*j

return g

fs =

for i in range(1, 4):

return fs

fs 新增的是 f(i),i 是迴圈變數,是不同的,而且 f(i) 是執行的 ,因此,fs 中儲存的 j*j 是已經計算出來了的,j 的值分別是迴圈變數的值,也就是 fs 中存的就是 [1*1,2*2,3*3],但由於 g 是函式,還沒有計算,因此到執行 f1(),f2(), f3() 的時候分別輸出 1,4,9

廖雪峰python教程 Python簡介

python是著名的 龜叔 guido van rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的乙個程式語言。現在,全世界差不多有600多種程式語言,但流行的程式語言也就那麼20來種。如果你聽說過tiobe排行榜,你就能知道程式語言的大致流行程度。這是最近10年最常用的10種程式語言...

廖雪峰python教程 Python簡介

python是著名的 龜叔 guido van rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的乙個程式語言。現在,全世界差不多有600多種程式語言,但流行的程式語言也就那麼20來種。如果你聽說過tiobe排行榜,你就能知道程式語言的大致流行程度。這是最近10年最常用的10種程式語言...

廖雪峰python教程筆記1

d.get thomas 1 檢查字典中是否有 thomas 的key,沒有返回 1,沒有指定返回值預設返回none d.pop bob 刪key 字典key不能為列表 s set 1,2,3 set需要以list作為輸入集合,不能重複且無順序。s.add s.remove s1 s2 s1 s2 ...