首頁技術(shù)文章正文

Python閉包的作用【Python培訓(xùn)】

更新時(shí)間:2022-09-01 來源:黑馬程序員 瀏覽量:

  我們都知道,Python函數(shù)是支持嵌套的。如果在一個內(nèi)部函數(shù)中對外部函數(shù)作用域(非全局作用域)的變量進(jìn)行引用,那么內(nèi)部函數(shù)就會被稱為閉包。閉包需要滿足如下三個條件:

  (1)存在于嵌套關(guān)系的函數(shù)中。

  (2)嵌套的內(nèi)部函數(shù)引用了外部函數(shù)的變量。

  (3)嵌套的外部函數(shù)會將內(nèi)部函數(shù)名作為返回值返回。

  為了讓讀者更好地認(rèn)識閉包,接下來,通過一個案例進(jìn)行講解,如例7-1所示。

  例7-1 閉包.py

# 外部函數(shù)
def outer(start=0):
    count = [start] # 函數(shù)內(nèi)的變量
    # 內(nèi)部函數(shù)
    def inner():
        count[0] += 1 # 引用外部函數(shù)的變量
        return count[0]
    # 返回內(nèi)部函數(shù)的名稱
    return inner
quote = outer(5)
print(quote())

  在例7-1中,第2~9行代碼定義了一個嵌套函數(shù)。其中,outer函數(shù)是外部函數(shù),,inner是內(nèi)部函數(shù)。

  在outer函數(shù)中,首先定義了一個表示列表的變量count(該列表只有一個元素),然后定義了一個inner函數(shù),最后將inner函數(shù)的名稱返回。

  在inner函數(shù)中,引用了外部函數(shù)定義的列表count,并對count的元素進(jìn)行修改,修改后的列表元素使用return返回。

  第10行代碼調(diào)用了外部函數(shù)outer,并將其返回的結(jié)果inner賦值給變量quote,這表明quote與inner一樣,引用的都是inner函數(shù)占用的內(nèi)存空間。

  第11行代碼調(diào)用了quote函數(shù),實(shí)際上就是調(diào)用inner函數(shù)。

  程序的運(yùn)行結(jié)果如圖7-1所示。

1662000664771_閉包示例.jpg

  圖7-1 運(yùn)行結(jié)果

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!