您的“關注”和“點贊”,是信任,是認可,是支持,是動力…
如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。
文章目錄
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>)
阿杰
男