美文网首页
python函数之闭包

python函数之闭包

作者: 飞跑的蛤蟆 | 来源:发表于2019-01-03 20:31 被阅读11次

    目录

    <a name="python函数之闭包" id="python函数之闭包"><h1>python函数之闭包</h1></a>

    <a name="什么是闭包" id="什么是闭包"><h2>什么是闭包</h2></a>

    闭包是(Closure)内层函数对外层函数(非全局)的变量的引用,这就叫闭包。闭包是由函数和其相关的引用环境组合而成的实体。
    

    <a name="python中的namespace" id="python中的namespace"><h2>python中的namespace</h2></a>

    python中通过提供namespace来实现重命名函数/方法、变量等信息的识别,共有三种namespace:

    • local namespace:作用范围为当前函数或者类方法
    • global namespace:作用范围为当前模块
    • build-in namespace:作用范围为所有模块

    当函数/方法、变量等信息发生重名时,python会按照 local namespace -> global namespace -> build-in namespace的顺序搜素用户所需元素,并且以第一个找到此元素的namespace为准。

    同时,python中的内置函数locals()globals()可以用来查看不同namespace中定义的元素。
    <a name="闭包的条件" id="闭包的条件"><h2>闭包的条件</h2></a>

    python中的闭包必须要满足三个条件:

    • 1、必须是一个嵌套的函数
    • 2、闭包必须返回嵌套函数
    • 3、嵌套函数必须引用一个外部的非全局的局部自由变量
      <a name="闭包的优点" id="闭包的优点"><h2>闭包的优点</h2></a>

    优点:

    • 1、保护变量不被他人侵害
    • 2、保持一个变量常驻内存
    >>> def wrapper():
        name = 'Walter White'  # 局部变量常驻于内存
        def inner():
            print(name)  # 在内层函数中使用了外层函数的局部变量
        return inner  # 返回函数名
    
    >>> ret = wrapper()  # ret是一个内层函数
    >>> ret()  # 因为name变量已经常驻内存了,这里能随时调用
    Walter White
    

    相关文章

      网友评论

          本文标题:python函数之闭包

          本文链接:https://www.haomeiwen.com/subject/kkwqrqtx.html