学习python(九)——闭包函数与lamba

1.闭包

闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被继续执行调用。闭包比普通的函数多了一个 __closure__ 属性,该属性记录着自由变量的地址。当闭包被调用时,系统就会根据该地址找到对应的自由变量,完成整体的函数调用。

使用闭包,可以让程序变得更简洁易读。

例如:现在要写一个求幂函数

def power(number):
    def powermath(base):
        return base**number

    return powermath
 
cube = power(3)
print(cube(5),"of the address is",cube.__closure__)

输出为:

外部函数power() 的返回值是函数 powermath(),而不是一个具体的数值。显示的内容是一个 int 整数类型,这就是 cube中自由变量 number的初始值。还可以看到,__closure__ 属性的类型是一个元组,这表明闭包可以支持多个自由变量的形式。

2.lambda

对于定义一个简单的函数,Python 还提供了另外一种方法,即使用本节介绍的 lambda 表达式。lambda 表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。

lambda 表达式的语法格式如下:name = lambda [list] : 表达式。其中,定义 lambda 表达式,必须使用 lambda 关键字;[list] 作为可选参数,等同于定义函数是指定的参数列表;value 为该表达式的名称。

可以这样理解 lambda 表达式,其就是简单函数(函数体仅是单行的表达式)的简写版本。相比函数,lamba 表达式具有以下  2 个优势:

  • 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
  • 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。

猜你喜欢

转载自blog.csdn.net/qq_35789421/article/details/113567820
今日推荐