Python基礎10 閉包

2021-06-28 17:47:52 字數 1107 閱讀 1431

內層函式引用了外層函式的變數(引數也算變數),然後返回內層函式的情況,稱為閉包(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...