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 形参)的地址。

当闭包被调用时,系统就会根据该地址找到对应的自由变量,完成整体的函数调用。

举例如下所示:

扫描二维码关注公众号,回复: 11389163 查看本文章
# 闭包函数
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

猜你喜欢

转载自blog.csdn.net/manongajie/article/details/105934737