Python 閉包函數詳解 [Python Function]

您的“關注”和“點贊”,是信任,是認可,是支持,是動力…

如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。

1 Python 閉包函數概述

閉包函數,又稱爲閉合函數,簡稱爲閉包。

與嵌套函數類似,不同之處在於,閉包函數要求外部函數返回的是一個函數。

舉例如下所示:

:: 表示等價於。
# 閉包函數
def person():
    def men():
        print('碼農阿杰')
    return men


new_men = person()  # new_men :: person() :: men
new_men()  # new_men() :: men()

運行結果:

碼農阿杰

2 Python 閉包的 __closure__ 屬性

__closure__ 屬性,裏面定義了一個元組用於存放所有的cell對象,每個cell對象保存了這個閉包中對應的自由變量(指的是如下例子中的 msg1、msg2 形參)的地址。

當閉包被調用時,系統就會根據該地址找到對應的自由變量,完成整體的函數調用。

舉例如下所示:

# 閉包函數
def person(msg1, msg2):

    def men():
        print(msg1, msg2)

    return men


new_men = person('阿杰', '男')  

print(new_men.__closure__)
print(new_men.__closure__[0].cell_contents)  # 獲取第一個自由變量
print(new_men.__closure__[1].cell_contents)  # 獲取第二個自由變量

運行結果:

(<cell at 0x00000229DF9D7400: str object at 0x00000229DFA0B570>, <cell at 0x00000229DF9E48B0: str object at 0x00000229DFA24710>)
阿杰
男

【友情鏈接】

微信公衆號:碼農阿杰

博客園

【參考資料】

Python 官網

Python 3.8.2 documentation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章