美文网首页
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函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • python高级之闭包

    python高级之闭包 什么是闭包? 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结...

  • 2018-11-20

    python函数的闭包 闭包: 嵌套函数调用外部函数的变量 注意: 闭包必须是内部函数调用外部函数定义的变量,这其...

  • Python 入门之 闭包

    Python 入门之 闭包 1、闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ clos...

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • python装饰器

    一、python装饰器本质 一言以蔽之:函数闭包的语法糖 增强一个函数的三种方式: 1,普通增强 2,用闭包函数增...

  • Python闭包与ObjC的block的区别与联系

    首先明确一下Python闭包和ObjC中block的定义在python中闭包是这么定义的——内层函数引用了外层函数...

  • Python中的闭包

    php对闭包的定义是匿名函数,我之前对python闭包的理解是:外部函数以内部函数作为返回值,称之为闭包!!!(错...

  • Python 闭包与装饰器图解

    python万物皆对象! 闭包 闭包:两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定有参数 def 外部...

网友评论

      本文标题:python函数之闭包

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