內層函式引用了外層函式的變數(引數也算變數),然後返回內層函式的情況,稱為閉包(closure)。
def
calc_sum
(lst):
deflazy_sum
():return sum(lst)
return lazy_sum
def
lazy_sum
(*args):
defsum
(): ax = 0
for n in args:
ax = ax + n
return ax
return sum
f = lazy_sum(1, 3, 5, 7, 9)
f()
區域性變數args
被返回函式引用返回的函式並沒有立刻執行,而是直到呼叫了f()才執行
def
count
(): fs =
for i in range(1, 4):
deff():
return i*i
return fs
f1, f2, f3 = count()
f1()//返回9
f2()//返回9
f3()//返回9
原因就在於返回的函式引用了變數i,但它並非立刻執行。等到3個函式都返回時,它們所引用的變數i已經變成了3,因此最終結果為9。返回函式不要引用任何迴圈變數
,或者後續會發生變化的變數
def
count
(): fs =
for i in range(1, 4):
deff(j):
defg
():return j*j
return g
return fs
f1, f2, f3 = count()
f1()//返回1
f2()//返回4
f3()//返回9
python基礎 閉包
摘自廖雪峰老師的部落格 返回閉包時,返回函式中不要引用任何後續可能變化的變數 如果一定要引用,就在原返回函式中再定義乙個函式,用該函式中的引數繫結可能變化的變數的當前值。def count fs for i in range 1,4 def f return i i return fs f1,f2,...
python 閉包 python 閉包
閉包 因為python中函式也可以當作物件,所以如果出現當我們返回乙個函式,而該函式含有外部變數的時候就形成了閉包。閉包的特點 是個巢狀函式 可以獲得非區域性的變數 將函式當作物件返回 看乙個例子會更易理解 def make printer msg msg hi there def printer ...
Python 基礎 5 閉包
什麼是 python 的閉包,通俗來講就是定義兩個函式,其中乙個函式在另乙個函式體裡,外面的函式的返回值是函式 體內函式的記憶體位址,這能有什麼用呢,閉包最大的優點就是,當外部函式執行完成後裡面的變數值不會馬上被銷毀。簡單的閉包函式 def func name def func in age ret...