Python實踐20-閉包簡介
閉包定義
In programming languages, closures (also lexical closures or function closures) are a technique for implementing lexically scoped name binding in languages with first-class functions.
解釋:
在編程語言中,閉包(也詞法閉包或函數閉包)是結合擁有 First-class function 的語言,實現詞法作用域名的一種技術。
根據類型的值的可賦值狀況,可以把類型分為三類
- 一級的(first-class)。該等級類型的值可以傳給子程序作為參數,可以從子程序里返回,可以賦給變數。大多數程序設計語言里,整型、字元類型等簡單類型都是一級的。 (Python中,函數就是一級的類型)
- 二級的(second-class)。該等級類型的值可以傳給子程序作為參數,但是不能從子程序里返回,也不能賦給變數。
- 三級的(third-class)。該等級類型的值連作為參數傳遞也不行。
Python中的閉包
- 定義:在一個內部函數里,對在外部作用域(但不是全局作用域)的變數進行引用,那麼內部函數就被認為是閉包。
- 形式:內部函數引用外部函數的變數。外部函數返回內部函數。
- 作用:避免使用全局變數,隱藏內部數據;類的簡單替代方式;
例子
下面我們舉一個例子來展示如何使用閉包代替類。
def make_multiplier_of(n):n def multiplier(x):n return x * nn return multipliernnnclass Multiplier(object):n def __init__(self, faciend):n self.faciend = faciendnn def product(self, multiplicator):n return self.faciend * multiplicatornnif __name__ == "__main__":n # 使用閉包n # Multiplier of 3n times3 = make_multiplier_of(3)nn # Multiplier of 5n times5 = make_multiplier_of(5)nn # Output: 27n print(times3(9))nn # Output: 15n print(times5(3))nn # 使用類n # Output: 27n mul = Multiplier(3)n print(mul.product(9))nn # Output: 15n mul = Multiplier(5)n print(mul.product(3))n
代碼下載
本文代碼已經歸檔到github,您可以訪問下面的鏈接獲得。歡迎star該代碼倉庫。
jumper2014/PyCodeComplete
如果覺得本文對您有幫助,敬請點贊。
推薦閱讀:
※Python培訓是運維還是全棧,有什麼區別嗎?
※PyQt5系列教程(16):小車快跑(滑塊的使用)
※第十章 Scrapy的架構初探
※基於ArcGIS的python編程 5、Arcpy的一個簡單應用(近鄰分析工具進行點線拓撲)