python基礎 閉包

2021-09-11 12:20:14 字數 817 閱讀 3413

摘自廖雪峰老師的部落格

返回閉包時,返回函式中不要引用任何後續可能變化的變數;

(如果一定要引用,就在原返回函式中再定義乙個函式,用該函式中的引數繫結可能變化的變數的當前值。)

def count():

fs =

for i in range(1, 4):

def f():

return i*i

return fs

f1, f2, f3 = count()

print f1() # f1執行結果為9

print f2() # f2執行結果為9

print f3() # f3執行結果為9

三個函式執行結果都為9的原因:fs中儲存著三個返回的函式f,三個函式中都引用了i,當函式執行時候,i已經變為3了。所以說:「返回函式中不要引用任何後續可能發生變化的變數」。

def count():

def f(j):

def g():

return j*j

return g

fs =

for i in range(1, 4):

return fs

f1, f2, f3 = count()

print f1() # f1執行結果為1

print f2() # f1執行結果為4

print f3() # f1執行結果為9

三個函式執行結果分別為1、4、9的原因:fs中儲存著三個返回的函式g,g中的引數繫結了迴圈變數當前值,所以不管f1、f2、f3什麼時候執行,結果都為1、4、9。

python 閉包 python 閉包

閉包 因為python中函式也可以當作物件,所以如果出現當我們返回乙個函式,而該函式含有外部變數的時候就形成了閉包。閉包的特點 是個巢狀函式 可以獲得非區域性的變數 將函式當作物件返回 看乙個例子會更易理解 def make printer msg msg hi there def printer ...

Python基礎10 閉包

內層函式引用了外層函式的變數 引數也算變數 然後返回內層函式的情況,稱為閉包 closure def calc sum lst deflazy sum return sum lst return lazy sumdef lazy sum args defsum ax 0 for n in args ...

Python 基礎 5 閉包

什麼是 python 的閉包,通俗來講就是定義兩個函式,其中乙個函式在另乙個函式體裡,外面的函式的返回值是函式 體內函式的記憶體位址,這能有什麼用呢,閉包最大的優點就是,當外部函式執行完成後裡面的變數值不會馬上被銷毀。簡單的閉包函式 def func name def func in age ret...