閉包簡單來說就是內層函式引用了外層函式的引數,並最終返回內層函式這樣的一種結構。
這個結構有乙個特點,那就是函式不會立刻執行,要理解這個意思,其實就是理解 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 ...