通過python理解閉包

來源:互聯網
上載者:User

標籤:

先看一個簡單的函數

1 def calc_sum(1st):
2 def lazy_sum():
3    return sum(1st)
4  return lazy_sum

此時發現沒法把lazy_sum移到calc_sum的外部,因為它引用了calc_sum的參數lst.

像這種內層函數引用了外層函數的變數(參數也算變數)。然後返回內層函數的情況,稱為閉包(closure).

閉包的特點是返回的函數還引用了外部函數的局部變數,所以要正確的使用閉包,就要確保引用的局部變數在函數返回後不能變。

下來我們來看一個案例應該就明白了:

實際結果全都是9

原因就是當count()函數返回了三個函數時,這三個函數所引用的變數i的值已經變成了3,由於f1,f2,f3並沒有被調用,所以他們並未計算i*i,當F1被調用時:結果為9.

因此,返回函數不要飲用任何迴圈變數,或者後續會大聲變化的變數。

像下面這樣這樣改寫了count()函數後,他就可以正確的返回149了

通過python理解閉包

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.