美文网首页
函数的闭包

函数的闭包

作者: 5f2a6061653d | 来源:发表于2019-03-03 23:04 被阅读38次

闭包

通过学习可知函数可以通过return返回一个变量,此外,也可以返回一个函数名,如下所示。

 1  def f1():
 2      print('f1()函数')
 3  def f2():
 4      print('f2()函数')
 5      return f1
 6  x = f2()
 7  x()
 8  f1() # 正确

运行结果如下图所示。


运行结果

在上例中,第5行在函数f2()中返回一个函数名f1,第6行调用f2()函数并将返回值赋值给x,第7行通过变量x间接调用f1()函数。
此外,还可以将f1()函数的定义移动到f2()中,这样f2()函数外的作用域就不能直接调用f1()函数,如下所示。

 1  def f2():
 2      print('f2()函数')
 3      def f1():
 4          print('f1()函数')
 5      return f1
 6  x = f2()
 7  x()
 8  # f1()  错误

运行结果如下图所示。


运行结果

运行结果在上例中,函数f1()的定义嵌套在函数f2()中,此时在函数f2()外的作用域不能直接调用函数f1(),如第8行代码。
将一个函数的定义嵌套到另一个函数中,还有其他的作用,如下所示。

 1  list1 = [1, 2, 3, 4, 5]
 2  def f2(list):
 3      def f1():
 4          return sum(list)
 5      return f1
 6  x = f2(list1)
 7  print(x())

运行结果如下图所示。


运行结果

在上例中,函数f2()中传入一个参数,在函数f1()中对该参数中的元素求和,具体执行过程如下图所示。


执行过程.png

在上图中,list1作为参数传进函数f2()中,此时不能把函数f1()移到函数f2()的外面,因为函数f1()的功能是计算list中所有元素值的和,所以f1()函数必须依赖于函数f2()的参数,如果函数f1()在函数f2()外,则无法取得f2()中的数据进行计算,这就引出了闭包的概念。
如果内层函数引用了外层函数的变量(包括其参数),并且外层函数返回内层函数名,此时就称内层函数为闭包。从概念中可以得出,闭包需要满足的三个条件:

  • 内层函数的定义嵌套在外层函数中
  • 内层函数引用外层函数的变量
  • 外层函数返回内层函数名

相关文章

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • 关于逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包当函数执行过程中,执行的函数内部的闭包,...

  • 3.逃逸闭包,非逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包:当函数执行过程中,执行的函数内部的闭包...

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • JS的闭包

    1.闭包的概念 闭包函数:声明在一个函数中的函数,叫做闭包函数。闭包:内部函数总是可以访问其所在的外部函数中声明的...

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • python函数之闭包

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

  • 闭包和立即执行函数

    闭包闭包:内部的函数引用了外部的函数的变量,则产生闭包。闭包的作用:把变量封装在函数中,只有内部函数可以用,让函数...

  • day14-函数(3)装饰器

    一、闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间与作用域 闭包函数 1、闭:指的是该函数是定义在一个函数内...

  • 闭包函数

    闭包函数 闭包,又称闭包函数或者闭合函数,其实和嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,...

网友评论

      本文标题:函数的闭包

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