python通俗易懂的閉包

2021-09-14 01:00:54 字數 1052 閱讀 9910

檢視官方解釋,閉包看起來確實不好理解,我通過查資料將閉包做乙個通俗的解釋:閉包是函式裡面再次定義乙個函式,外部的函式暫且稱為外函式,內部的函式暫且稱為內函式。外函式的返回值為內函式和它的環境,它的環境就是外函式的區域性變數(也是內函式的外部變數)當前的值,比如當前變數的值,很多教程裡將閉包的時候會用到下面這個例子(來自廖雪峰python教程):

def count():

fs =

for i in range(1, 4):

def f():

return i*i

return fs

f1, f2, f3 = count()

>>> f1, f2, f3 = count()

>>> f1()

9>>> f2()

9>>> f3()

9

結果出乎意料,我們本來想得到的結果是1,4,9。為什麼會出現這種情況呢?

因為閉包不是立刻執行的,等呼叫的時候,也就是輸入f1()的時候才執行,我們說過,閉包返回的是函式和它的環境,思考一下,定義f1,f2,f3的時候返回的是什麼?是不是f()函式和它的環境(i=3),因為內函式不立刻執行,但是外函式是執行的,等執行完後i=3,所以內函式的環境就是i=3,如果有多個變數,那麼環境更複雜。那麼這個問題如何解決呢?請看下面的**:

def count():

fs =

for i in range(1, 4):

def f(y=i):

return y*y

return fs

f1, f2, f3 = count()

print(f1(),f2(),f3())

只要每次用y記住當前的變數i就行,也就是記住咱們想讓他記住的時刻,如i=1,i=2,i=3的時刻,這樣,f1的時候,返回的是函式f和y=1,f2的時候返回的是函式f和y=2......所以此時就可以得到結果1,4,9.不信可以try。

本部落格參考

廖雪峰python教程

關於閉包最通俗易懂的解釋

1,對於乙個基本的for迴圈,順序輸出變數值。for var i 1 i 4 i 2,如果for迴圈中有定時器,如下 for var i 1 i 4 i 3000 初衷想要3s後輸出1,2,3。但是3s後,輸出3個4。原因是定時器的非同步執行,for迴圈的執行速度很快,當真正執行到函式體時,此時i早...

通俗易懂 Python閉包 裝飾器

參考的資料 舉乙個例子 def secondflood msg 你好 defthirdflood print msg secondflood 結果如下 是呼叫不到內嵌在裡面的函式的 使用如下方式 def secondflood msg 你好 defthirdflood print msg retur...

numpy bincount 通俗易懂

bincount的用途很簡單,就是統計出乙個列表的各個元素的出現次數。例如輸入是 1,0,2,2,1,2,3,5 那麼輸出就是 1,2,3,1,0,1 這樣的結果可能並不是很直觀,可能依然會有同學會問為什麼會輸出這樣的結果。我們看看 假如我們把輸入的列表中的數字都統計一遍,形成乙個字典 key是列表...