说说Python中闭包是什么?

公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!

小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。

废话不多说,开始今天的题目:

问:说说Python中闭包是什么?

答:可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,外函数和内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

闭包在Python中很常见,只不过你没特别注意这就是一个闭包。比如Python中的装饰器Decorator,假如你需要写一个带参数的装饰器,那么一般都会生成闭包。

下面先用伪代码进行闭包格式的描述:

def 外层函数(参数):
    def 内层函数():
        print("内层函数执行", 参数)

return 内层函数

内层函数的引用 = 外层函数("传入参数")
内层函数的引用()

再来个闭包最简单的例子,方便大家理解:

#闭包函数的实例
# outer是外部函数
def outer( a ):
    # inner是内函数
    def inner( b ):
        #在内函数中 用到了外函数的临时变量
        print(a+b)
    # 外函数的返回值是内函数的引用
    return inner
ret = outer(5) #ret = inner
ret(10) #15 ret 存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数

上面ret(10),运行结果是15,你看懂了吗?在这个案例中,外函数outer有接收参数 a=5,内函数inner接收参数b=10,在内函数体中计算了a+b 即 5+10的值作为返回值,外函数返回内函数的引用,这里引用指的是内函数inner在内存中的起始地址,最终调用内函数inner()得到返回值15。

文末推荐闭包的文章链接:

https://www.cnblogs.com/Lin-Yi/p/7305364.html

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-40、Python面试1-40题汇总

41、说说Python中的正则表达式?
42、Python如何实现斐波那契数列?
43、说说Python 中 is 和 == 的区别?
44、说说Python如何实现杨辉三角?
45、说说Python中变量的作用域?
46、Python打印九九乘法表有几种方式?
47、Python中列表常见的方法有哪些?
48、说说Python中yield的用法?
49、说说Python中元类是什么?
50、Python中几种常见的排序算法?

关注小猿公众号,每天学习一道题

(0)

相关推荐

  • python - 内置对象 之 变量

    一.变量命名规划 1.命名规则 (1)命名内容只能是字母.下划线.数字 (2)名字第1字符只能是字母或下划线 (3)区分大小写 2.私有变量 (1)_xxx "单下划线" 开始的成 ...

  • UC头条:在Python中使用Lambda函数的5种用法

    引言 Lambda 函数(也称为匿名函数)是函数式编程中的核心概念之一. 支持多编程范例的 Python 也提供了一种简单的方法来定义 lambda 函数. 用 Python 编写 lambda 函数 ...

  • 初识装饰器函数

    我之前看装饰器文章介绍,很少有用 装饰器函数这种称谓的.但是今天大邓简单的学了下装饰器,觉得应该先让大家知道装饰器是一种函数,让大家从熟悉的函数去学习装饰器.大邓姑且草率的将其称呼为 装饰器函数 装饰 ...

  • Python学习—装饰器

    学习Python已经有一段时间了,陆续学了一些基础部分,但是理解的不是很深刻,每过一段时间就会忘记,所以不得不写一些博客进行记录,加深自己的理解.这两个星期一直在研究装饰器,开始觉得很简单,但是只知其 ...

  • Python之函数返回值的示例代码详解

    文中通过示例代码介绍的非常详细,下面我们一起来看一下吧. 0x  00返回值简介 回顾下,上一节简单介绍了函数及其各种参数,其中也有简单介绍print和return的区别,print仅仅是打印在控制台 ...

  • Python 为什么引入这两个关键词

    啥是 global 和 nonlocal Python 支持的关键词里,global 和 nonlocal 初学者接触的少,不知道是做什么用的:一些人虽然知道它们的作用,但对为什么要引入这两个关键词则 ...

  • 字节码:分析 Python 执行的终极利器

    一.什么是代码对象 Code Object(代码对象)封装了 Python 虚拟机的字节码和虚拟机执行相关信息,可以把字节码称为 Python 虚拟机上的汇编语言. 学代码对象有什么用呢?从其定义可知 ...

  • 一文看懂Python系列之装饰器(decorator)(工作面试必读)

    Python的装饰器(decorator)可以说是Python的一个神器,它可以在不改变一个函数代码和调用方式的情况下给函数添加新的功能.Python的装饰器同时也是Python学习从入门到精通过程中 ...

  • Python 中的函数装饰器和闭包

    函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另一个函数,称为被装饰函数.装饰器可以修改这个函数再将其返回, ...

  • Python中tuple和list的区别?基础学习!

    想必大家都知道,Python数据类型有很多种,其中有两个对象的写法非常相似,它就是tuple元组和list列表,让人傻傻分不清楚.那么你知道Python中tuple和list有什么区别吗?我们来看看具 ...

  • Python中缩进是什么?入门分享!

    众所周知,Python是一门独特的编程语言,它语法清晰.简单易学,而且Python是通过缩进来识别代码块的,因为一般的语言都是通过{}或者end来作为代码块标记. Python中缩进是什么? 要求严格 ...

  • python中的内置函数

    前言 本人只在csdn写博客 内置函数 介绍 一. 数学运算 abs()求绝对值函数 round() 近似取值 pow()求指数 divmod()求商和余数 max()求最大值和min()求最小值 s ...

  • 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  • 【青少年编程】Python中的分号

    今天有小朋友问我以下的选择题: 关于Python赋值语句,以下选项中不合法的是() A. x = (y=1) B. x, y = y, x C. x = y = 1 D. x = 1; y = 1 这 ...

  • 关于python中if __name__ == '__main__':的理解

    调试代码的时候都会写上if __name__ == '__main__':,然后写上数据进行调试,一直没有理解到这句的含义,就照搬着写,到现在才算理解到,大概说下自己的见解. 1.在python里__ ...

  • 彻底搞懂Python 中的 import 与 from import

    对不少 Python 初学者来说,Python 导入其他模块的方式让他们很难理解.什么时候用import xxx?什么时候用from xxx import yyy?什么时候用from xxx.yyy ...

  • Python中的*args和**kwargs

    在Python中的代码中经常会见到这两个词 args 和 kwargs,前面通常还会加上一个或者两个星号.其实这只是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数:kw ...