• python-闭包


    2019-12-04 15:15:56

    闭包这个概念其实很久之前就听说过,之前也有粗略的了解了一点相关的知识,本章对闭包这个概念做一些讨论和总结。

    一、概念

    闭包这个词初看其实是比较抽象的,那么什么是闭包呢?

    闭包的英文是 closure,英文的意思大概是:a function which closes over the environment(scope) in which it was defined。

    所以说这里的“闭”不是封闭内部状态,而是封闭外部状态,当外部状态作用域消失的时候,还保留一份在其内部状态中。

    所以,从本质上来说,闭包的作用可以理解为突破作用域的技巧。我们知道函数内部的变量是局部变量,即local的,这些变量在函数的外部是没有办法进行访问的,如果我们想要去访问这些变量的时候就需要使用闭包的技术。

    二、举例

    闭包往往和内部函数绑定在一起,下面举个例子。

    def show_msg(name):
        def helper(age):
            print("Name is %s, age is %s" % (name, age))
        return helper
    
    
    if __name__ == "__main__":
        msg = show_msg("Bob")
        msg(20)
        msg(25)
    

    这里面调用show_msg的时候就产生了一个闭包helper,并且该闭包持有父函数变量name,因此这也意味着,当函数show_msg的生命周期结束之后,name这个变量依然存在,因为它被闭包引用了,所以不会被回收。

    另外,我们需要注意一点,就是闭包中直接修改父函数变量的值是不被允许的,需要加上nonlocal的声明才可以进行修改

    def money():
        value = 50
    
        def inner_func(status):
            nonlocal value  # python3 中不支持直接在内部函数中修改父函数的变量数值,如需修改需要声明nonlocal
            if status == 0:
                value -= 1
            else:
                value += 1
            print("Current money : %s", value)
    
        return inner_func
    
    
    if __name__ == "__main__":
        func0 = money()
        func0(0)
        func0(1)
    

      

  • 相关阅读:
    numpy-tutorial
    Pandas 数据分析资料
    python3 创建虚拟环境
    机器学习中的评价指标--02
    机器学习中的评价指标--01
    pytest 测试框架
    Ubuntu 添加删除用户
    VSCODE 设置护眼颜色
    信息熵、交叉熵、KL散度等等
    深度学习优化方法演变和公式理解
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/11983645.html
Copyright © 2020-2023  润新知