Python札记23_闭包(更新)

作者: 皮皮大 | 来源:发表于2019-06-29 17:37 被阅读0次

Python是一种面向对象的编程语言,在Python中一切皆是对象。函数也是对象,变量拥有的属性,函数同样拥有。因此在函数内部创建一个函数的行为是完全合法的。这种函数称为嵌套函数或者内嵌函数闭包称为词法闭包或者函数闭包,是引用了自由变量的函数。装饰器是一种特殊的闭包应用。闭包有两个特点:

  • 定义在另一个函数里面,嵌套作用
  • 内部函数对外部函数作用域里面变量的引用

闭包与装饰器


通过一个例子认识闭包:

  • foo外部的变量能够被引用
  • foo内部定义的变量却不能被引用

如果想函数外面使用内部定义的变量,how to do it?

方法1:通过函数嵌套实现

def foo():
    a = 3
    def bar():
        return a 
    return bar   # foo的返回值是bar函数

res = foo()  # 调用foo函数:res是个函数对象,执行bar函数的代码
res()  # 
image.png image.png
总结
  • foo函数里面有a=3bar()函数,二者互不影响,变量a
    相对于bar()函数是自由变量
  • bar()函数应用了自由变量a
  • bar()函数就是定义的闭包

下面的例子说明函数内部的属性都有生命周期,在函数执行期间才有。

image.png
def func():  # 外部函数
    print("this is func")
    def func1():  # 内部函数在外部函数执行的过程中被创建
        print("this is func1")
image.png
  • 外部函数能够直接运行,内部函数不能直接运行
  • 运行外部函数,内部函数被创建

def func():  # 外部函数
    print("this is func")
    def func1():  # 内部函数
        print("this is func1")
    return func1

var = func()   # 外部函数运行,内部函数就被创建
# func执行创建了func1
var()  # var == func1
image.png
def func():  # 外部函数
    a = 1  # 外部函数作用域的变量
    print("this is func")
    def func1(num):  # 内部函数
        print("this is func1")
        print(num + a)
    return func1   # 返回的是一个函数:函数里面的东西很多;用func1函数将变量a包装起来

var = func()   # 外部函数运行,内部函数就被创建
# func执行创建了func1
var(3)  # var == func1
image.png
  • func1是闭包函数
  • 私有化了外部函数作用域的变量a,实现数据封装

练习题:使用闭包写出一个抛物线函数

def pao_wu_xian(a, b, c):
    def para(x):
        return a*x**2 + b*x + c
    return para

res = pao_wu_xian(2, 3, 4)   # 先调用pao_wu_xian函数
res(2)  # 调用内嵌的para函数

18
image.png

相关文章

  • Python札记23_闭包(更新)

    Python是一种面向对象的编程语言,在Python中一切皆是对象。函数也是对象,变量拥有的属性,函数同样拥有。因...

  • python闭包学习

    参考文章 python闭包python闭包一步一步教你认识Python闭包深入浅出python闭包

  • python函数之闭包

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

  • Python 闭包使用注意点

    1 Python 闭包 今天,聊下 python 的闭包。在函数编程中经常用到闭包。 闭包是什么,它是怎么产生的及...

  • python高级之闭包

    python高级之闭包 什么是闭包? 闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结...

  • Python 中的闭包

    Python 中的闭包:+ http://python.jobbole.com/82296/

  • python之理解闭包和装饰器

    python之理解闭包和装饰器 1、闭包函数 1.1 python中函数都是对象 结果: 上面定义一个shut函数...

  • 闭包

    浅谈 python 的闭包思想 首先 python的闭包使用方法是:在方法A内添加方法B,然后return 方法B...

  • 2018-11-20

    python函数的闭包 闭包: 嵌套函数调用外部函数的变量 注意: 闭包必须是内部函数调用外部函数定义的变量,这其...

  • Python 入门之 闭包

    Python 入门之 闭包 1、闭包 (1)在嵌套函数内使用(非本层变量)和非全局变量就是闭包 (2)_ clos...

网友评论

    本文标题:Python札记23_闭包(更新)

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