您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
文章目录
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>)
阿杰
男