Python闭包

知识点

闭包内容

  • 闭包定义

    闭包是一个函数中嵌套着一个函数,相比较对象而言其占用系统空间更小,可以实现小功能。相比较函数而言,其能够传递函数和数据,而函数只能实现功能。

  • 代码结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    def fx(a,b):
    num = 100
    def sum(x):
    # 当需要修改函数中的变量值时,需要用nonlocal进行申明,反之就不用修饰,直接调用即可
    nonlocal num
    num = 20
    print(a*x+b+num)
    # 函数名未加名称相当于返回该函数的引用
    return sum
  • 匿名函数、函数、闭包、对象之间的区别

    匿名函数:完成最基本的功能,传递的是这个函数的引用,只有功能。

    函数:普通函数能够完成较为复杂的功能,传递的是这个函数的引用,只有功能

    闭包:闭包能够完成较为复杂的功能,传递的是这个闭包中的函数和数据,因此传递的是功能+数据

    对象:对象能够完成最为复杂的功能,可以传递很多数据和很多功能,因此传递的是数据+功能

  • 灵魂拷问:闭包和函数的区别

拓展

  • python内置函数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # hasattr(对象, '属性名'):用于判断对象中是否含有某属性
    hasattr(对象名, '属性名') # 属性名需要用引号包裹

    # setattr(对象, '属性名', 属性值):用于向已有额对象中添加/更新属性信息,如果属性已存在,则会用新的属性值更新,如果不存在,则会添加一个新的属性值
    setattr(对象名, '属性名', 属性值) # 属性名需要用引号包裹,而属性值则看情况

    # getattr(对象名, '属性名', default):用于获取对象中的属性值,如果对象中无该属性值,则返回default,否则返回属性值
    # default也可以不指定任何值
    getattr(对象名, '属性名', 属性值) # 属性名需要用引号包裹