Python 闭包

àì夳堔傛蜴生んèń 2021-12-20 12:07 339阅读 0赞

高阶函数与闭包

  • 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回;
  • 如果返回的函数中,包含了原函数的参数或者变量,这种就叫做闭包;
  • 返回的是函数不会被立即执行,再次调用被执行;

    def count():
    … fs = []
    … for i in range(1, 4):
    … def f():
    … return i*i
    … fs.append(f)
    … return fs

    f1, f2, f3 = count()
    f1()
    9
    f2()
    9
    f3()
    9

添加进列表的3个函数返回的值全部都是9!原因就在于返回的函数引用了变量i,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i已经变成了3,因此最终结果为9

改动一:

  1. >>> def count():
  2. ... fs = []
  3. ... for i in range(1, 4):
  4. ... def f():
  5. ... return i*i
  6. ... fs.append(f())
  7. ... return fs
  8. ...
  9. >>> f1, f2, f3 = count()
  10. >>> f1
  11. 1
  12. >>> f2
  13. 4
  14. >>> f3
  15. 9

添加进列表的对象由函数 f , 变成了 f 的执行结果 f(),而 f() 的执行结果是一个具体的值。

改动二:

  1. >>> def count():
  2. ... fs = []
  3. ... def f(j):
  4. ... def g()
  5. ... return j*j
  6. ... return g
  7. ... for i in range(1, 4):
  8. ... fs.append(f(i))
  9. ... return fs
  10. ...
  11. >>> f1, f2, f3 = count()
  12. >>> f1()
  13. 1
  14. >>> f2()
  15. 4
  16. >>> f3()
  17. 9

添加进列表的对象由函数 f , 变成了 f 的执行结果 f(i),虽然 f(i) 也返回的是一个函数,但 f(i) 在循环时立刻会被执行,因此 i 的当前值被传入f()。

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读

    相关 19-python

    定义 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。 一般情况下,在我们认知当中,如果一个函数

    相关 python

    定义 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。 一般情况下,在我们认知当中,如果一个函数

    相关 聊聊Python

    原文链接:[点击打开链接][Link 1] 摘要: Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西。 闭包的概念

    相关 Python

    Python闭包 闭包叫lexical closure(词法闭包),指函数及相关的环境所组成的整体。内部的称为函数,外部的称为环境,外层给内层函数提供一个运行环境。 如例1

    相关 python

    闭包: 闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function

    相关 Python

    高阶函数与闭包 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回; 如果返回的函数中,包含了原函数的参数或者变量,这种就叫做闭包; 返回的