06.python闭包

python闭包

  • 什么样的函数是 闭包函数

    满足以下条件:
    闭:外层函数嵌套了一个内层函数
    包:内层函数调用外层函数命名空间内的名字。

    举例如下:

    def out_func(): # 外层函数
        data = 'soria' 
        def in_func():  # 内层函数
            print(data) # 内层函数调用外层函数命名空间内的变量
        return in_func
    Box = out_func()
    Box()
    

    执行顺序是:

    1.认顺序从上往下执行

    2.遇到"="优先执行右边的out_fun()

    3.执行函数out_func(),在其命名空间内,定义data,定义函数in_func(),return返回in_func

    4.Box接受in_func这个函数对象

    5.Box()相当于in_func()

    6.执行in_func(),但是发现in_func()的命名空间没有data

    7.去外层函数out_func的命名空间取data

    8.输出'soria'

  • 闭包函数 使用形参 给内层函数 传参

    def out_func(data): # 外层函数
        def in_func():  # 内层函数
            print(data) 
        return in_func
    Box = out_func('soria') # 形参data与'soria'临时绑定
    Box()
    Box = out_func('jason') # 形参data与'jason'临时绑定
    Box()
    

    在传入'数据'这个值时,相当于将形参与"数据"这个值临时绑定。

    相当于在out_func函数体内加入了一行代码data = 'soria'

    当内层函数in_func找不到data这个值时,依然会去外层函数寻找data,

    此时就找到了形参绑定的值:'soria'。

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...