文章目录

  • 闭包的概念
  • 闭包实例
  • 如何判断是否是闭包函数

闭包的概念

在 Python 中很多地方都会使用到闭包,那么究竟什么叫做闭包呢? 在维基百科上是这么解释的。

在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。——
维基百科

简而言之, 闭包的特点就是内部函数引用了外部函数中的变量。 在Python中,支持将函数当做对象使用,也就是可以将一个函数当做普通变量一样用作另一个函数的参数和返回值。拥有此类特性的语言,一般都支持闭包。

闭包中被内部函数引用的变量,不会因为外部函数结束而被释放掉,而是一直存在内存中,知道内部函数被调用结束。

闭包实例

def func():name = 'python'def inner():print(name)return innerf = func()  # f = func() = inner
f()  # f() = inner
# 输出结果:python

因为作用域的原因,在函数外部就无法拿到函数中的变量和内部函数。通常我们需要使用函数中的变量时,才去将变量返回的办法。同理,在使用内部函数时,我们也可以将函数名作为返回值返回。 这是闭包最常用的方式。

如何判断是否是闭包函数

函数名.__closure__ 在函数是闭包函数时,返回一个cell元素;不是闭包时,返回None。
输出cell:

def func():name = 'python'def inner():print(name)print(inner.__closure__)  # (<cell at 0x0000027C14EB85E8: str object at 0x0000027C14F54960>,)return innerf = func()
f()

输出None:

name = 'python'
def func():def inner():print(name)print(inner.__closure__)  # Nonereturn innerf = func()
f()

Python基础之闭包函数相关推荐

  1. Python基础day05【函数应用:学生管理系统、拆包、今日总结】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  2. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  3. python什么元素为真_如何使用Python基础内置函数

    如何使用Python基础内置函数 发布时间:2020-08-05 13:46:59

  4. python中递归函数的基例_详谈Python基础之内置函数和递归 Python递归和循环的区别...

    Python 递归函数基例 2. 关于递归函数基例的说明,以下选项中错误的是 A 递归函数的基例决定所谓基例就是不需要递归就能求解的,一般来说是问题的最小规模下的解. 例如:斐波那契数列递归,f(n) ...

  5. python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....

    python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 函数,就是一个代码块,这个代码块是别人写好的.我们调用就可以. 函数也可以称为方法. 1.函数语法定义 ...

  6. 【Python基础】reduce函数详解

    转载请注明出处:[Python基础]reduce函数详解 reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中. reduce函数先从列表(或序列 ...

  7. Python训练营—Tesk3—Python基础进阶—从函数到高级魔方方法

                    Python基础进阶--从函数到高级魔方方法 目录 Python基础进阶--从函数到高级魔方方法 一.函数 1.函数的定义 2.函数的调用 3.函数参数 4.变量作用域 ...

  8. python入门之函数调用第二关_猪行天下之Python基础——5.1 函数(上)

    内容简述: 1.函数定义 2.形参与实参 3.关键字参数与默认参数 4.可变参数 5.全局变量与局部变量 6.内部函数 7.闭包 8.lambda表达式 9.递归 1.函数定义 我们可以将一些实现特定 ...

  9. python教程:闭包函数

    一:大前提 闭包函数 = 名称空间与作用域 + 函数嵌套 + 函数对象 核心点:名字的查找关系是以函数定义阶段为准 二:什么是闭包函数 "闭"函数指的该函数是内嵌函数 " ...

最新文章

  1. CSDN创始人蒋涛:AI定义的开发者时代
  2. VSCode---Latex论文编辑
  3. Maven实践:版本管理 SNAPSHOT
  4. HTTP GET与POST区别
  5. 通过xrdp实现远程桌面连接Windows Azure linux虚拟机
  6. python如何读取csv文件列表页_每25行读取一个csv文件,并使用python传递到列表
  7. ITF跆拳道中的基本腿法(图文)
  8. Excel绘制斜线表头
  9. 做数据分析为何要学统计学(1)——样本分布
  10. 【作业分享】Reverse Polish Notation | 数据结构·stack
  11. 提示磁盘被写保护怎么办?
  12. 八年级计算机word操作,【初二专区】中考信息技术考试(三),Word操作综述+练习!...
  13. 求最大公约数和最小公倍数的方法:
  14. mysql 处理emij表情_判断是否emij表情
  15. 201521123064 《Java程序设计》第7周学习总结
  16. 北大计算机专业考研难不难,北京大学考研有多难 二本考研上北大经验谈
  17. css样式换行缩进技巧
  18. 双十一就要到啦,教你用Python制作抢购脚本,秒杀一切商品
  19. docker-swam集群搭建
  20. phpcmsv9实现手机端与PC端双模板的方法与详细教程(转)

热门文章

  1. v-model 原理及使用
  2. win10一按右键就闪屏_六种方法教你如何解决win10笔记本屏幕闪烁问题?
  3. 眼睛炯炯有神的教官领着我们这些小公主
  4. Arduino与Proteus仿真实例-L298N驱动直流电机仿真
  5. 日常积累6:提取并拟合图片中的曲线
  6. 深度学习与计算机视觉教程(11) | 循环神经网络及视觉应用(CV通关指南·完结)
  7. IOS:UIImage的剪切,尺寸缩小、压缩、添加水印
  8. JavaScript实现的简单烟花特效代码1.15
  9. win10系统哪个是索引服务器,小编教你在Win10系统下建立索引的方法技巧
  10. 解决单元测试时报Could not instantiate问题