python 什么是閉包


 

1.啰嗦一下

學這個知識點的時候,我本來想先了解下定義, 知道個大概再說, 翻了幾篇博客,基本上都是有例子帶着進入理解這塊。即使讀了定義,思想還是不能顯出個框架。 想吃快餐,有些行,有些就不可以(這里僅代表我自己)。

有個詞叫格物致知,《現代漢語詞典》2012年發行的第六版將“格物致知”解釋為:“推究事物的原理,從而獲得知識。”

以后學習着急的時候就用這個詞 “格物致知” 來先放慢腳步。

 

2.定義

字面的定義:閉包是由函數及其相關的引用環境組合而成的實體(即:閉包=函數+引用環境)

 

3.舉個栗子,再解釋一下

看例子

 

函數可以作為另一個函數的參數或返回值,可以賦給一個變量。函數可 以嵌套定義,即在一個函數內部可以定義另一個函數,有了嵌套函數這種結構,便會產生閉包問題。

 內嵌函數inF(),引用了外層函數的變量sum,

當我們用不同參數調用outF()是,得到的結果是隔離的

也就是說每次調用outF()函數后都將生成並保存一個新的局部變量sum。其實這里outF()函數返回的就是閉包。

在函數式語言中,當內嵌函數體內引用到體外的變量時,將會把定義時涉及到的引用環境和函數體打包成一個整體(閉包)返回。

現在給出引用環境的定義就 容易理解了:引用環境是指在程序執行中的某個點所有處於活躍狀態的約束(一個變量的名字和其所代表的對象之間的聯系)所組成的集合。閉包的使用和正常的函 數調用沒有區別。

 

4.再舉個栗子,內嵌函數帶參數

 這里c返回的就是內嵌函數addy()

c(10)也就是指addy(10),

 

 

 5.閉包的用途

用途1,當閉包執行完后,仍然能夠保持住當前的運行環境。

用途2,閉包可以根據外部作用域的局部變量來得到不同的結果,這有點像一種類似配置功能的作用,我們可以修改外部的變量,閉包根據這個變量展現出不同的功能。

 

 

 6.總結如何創建一個閉包

在Python中創建一個閉包可以歸結為以下三點:

函數內嵌函數;

內嵌函數需要引用上一級namespace中的變量;

外圍函數必須返回內嵌函數;

通過這三點,就可以創建一個閉包,Python裝飾器就是使用了閉包。

 

 

參考:

https://www.cnblogs.com/JohnABC/p/4076855.html

https://www.jianshu.com/p/1de5db830a44?utm_campaign


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM