首页 > 编程语言 >06.python闭包

06.python闭包

时间:2022-08-27 00:22:31浏览次数:51  
标签:闭包 box 06 函数 python soria func data out

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'。

标签:闭包,box,06,函数,python,soria,func,data,out
From: https://www.cnblogs.com/passion2021/p/16629643.html

相关文章

  • 学习python-Day48
    今日学习内容JS获取用户输入有两种方式:普通数据(输入、选择)​ 标签对象.value文件数据(上传)​ 标签对象.files​ 标签对象.files[0]JS类属性操作let标签......
  • Python枚举用法_Enum
    #-*-coding:utf-8-*-fromenumimportEnum,unique#1.枚举的定义#首先,定义枚举要导入enum模块。#枚举定义用class关键字,继承Enum类。#2.如果要限制定......
  • 【2022-08-26】python前端开发(五)
    python前端开发(五)JS获取值操作普通数据(输入、选择) 标签对象.value文件数据(上传) 标签对象.files 标签对象.files[0]leti1Ele=document.getElementById('d1......
  • 10个python基础技巧
    下面有几个python初学者不知道的技巧,学会了可以大大提升代码的简洁性和便捷性。1、真值比较初学者经常在if语句中使用==比较符来判断表达式是否为真值#错误写法a=Tru......
  • 基于Anacoda搭建虚拟环境cudnn6.0+cuda8.0+python3.6+tensorflow-gpu1.4.0
    !一定要查准cudnn,cuda,tensorflow-gpu对应的版本号再进行安装,且本文一切安装均在虚拟环境中完成。下文以笔者自己电脑为例,展开安装教程阐述(省略anaconda安装教程):1.查询电脑......
  • python基础-函数的进阶
    python基础-函数的进阶 一.函数参数--动态传参之前我们说过了传参,如果我们需要给一个函数传参, 而参数又是不确定的.或者我给一个函数传很多参数,我的形参就......
  • python基础-练习题
    python基础-练习题 选择题: 1.如果变量x=3,那么,请选择x+=3结果为():62.在python解释器中,'a'+'b'+'1'的执行结果为():'ab1'3.python解释器中,执行int('11a')......
  • python基础 -列表,元组
    python基础-列表,元组  一.1.1列表的介绍列表是python的基础数据类型之一,其他编程语言也有类似的数据类型.比如JS中的数组,java中的数组等等.它是以[]括起......
  • python基础-is 和==的区别及编码和解码
    python基础-is和==的区别及编码和解码 is和==的区别 #a='alex@'#a1='alex@'#print(aisa1)#Fales#......
  • python基础-set集合,深浅拷贝
    python基础-set集合,深浅拷贝  一.基础数据类型补充补充给一个字符串基本操作 列表:循环删除列表中的每一个元素 分析原因:for的运行过程.会有一个......