更新時間:2022-09-01 來源:黑馬程序員 瀏覽量:
我們都知道,Python函數(shù)是支持嵌套的。如果在一個內部函數(shù)中對外部函數(shù)作用域(非全局作用域)的變量進行引用,那么內部函數(shù)就會被稱為閉包。閉包需要滿足如下三個條件:
(1)存在于嵌套關系的函數(shù)中。
(2)嵌套的內部函數(shù)引用了外部函數(shù)的變量。
(3)嵌套的外部函數(shù)會將內部函數(shù)名作為返回值返回。
為了讓讀者更好地認識閉包,接下來,通過一個案例進行講解,如例7-1所示。
例7-1 閉包.py
# 外部函數(shù) def outer(start=0): count = [start] # 函數(shù)內的變量 # 內部函數(shù) def inner(): count[0] += 1 # 引用外部函數(shù)的變量 return count[0] # 返回內部函數(shù)的名稱 return inner quote = outer(5) print(quote())
在例7-1中,第2~9行代碼定義了一個嵌套函數(shù)。其中,outer函數(shù)是外部函數(shù),,inner是內部函數(shù)。
在outer函數(shù)中,首先定義了一個表示列表的變量count(該列表只有一個元素),然后定義了一個inner函數(shù),最后將inner函數(shù)的名稱返回。
在inner函數(shù)中,引用了外部函數(shù)定義的列表count,并對count的元素進行修改,修改后的列表元素使用return返回。
第10行代碼調用了外部函數(shù)outer,并將其返回的結果inner賦值給變量quote,這表明quote與inner一樣,引用的都是inner函數(shù)占用的內存空間。
第11行代碼調用了quote函數(shù),實際上就是調用inner函數(shù)。
程序的運行結果如圖7-1所示。
圖7-1 運行結果