Python核心技术——简洁的匿名函数(上)

前面我们学习了Python中的自定义函数,知道函数用途广泛。如果将自定义函数视为“常规部队”,那么我们来看看“非常规部队”---匿名函数(lambda),它往往很简短,很多时间就是一行代码。

Python中的自定义函数:

Python核心技术——简洁的匿名函数(上)

Python核心技术——不可或缺的自定义函数(中)

Python核心技术——不可或缺的自定义函数(下)

Python核心技术——不可或缺的自定义函数(闭包)

什么是匿名函数?

lambda 表达式,又称

匿名函数

,常用来表示内部仅包含 1 行表达式的函数。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。

匿名函数的格式如下:lambda [形成列表]:表达式

其中匿名函数的关键字是lambda,之后,形成列表中包含一系列的参数(形参1,形参2,……,形参N),参数与参数之间用冒号(,)隔开,最后是由这些参数组成的表达式。

通过几个例子来看看看匿名函数的具体用法:

这个匿名函数功能:输入一个参数 x,输入这个 x 的平方。因此,当我们输入是3 时,输出为是 9。

匿名函数实现:输入一个参数 x,输入这个 x 的平方。那如果把这个匿名函数写成常规函数的形式,怎么编写呢?具体如下面所示:

我们可以知道:匿名函数 lambda 和常规函数一样,返回值都是一个函数对象,它们的用法也极其相似,不过还是有些区别。我们来看看匿名函数 lambda 和常规函数之间的区别和联系:

匿名函数 lambda 和常规函数的联系:

匿名函数 lambda 和常规函数大多数情况下可以相互转换,例如,求两个数之和。

注意:匿名函数 lambda 一定能转为常规函数,但是常规函数不一定能转为匿名函数 lambda

匿名函数 lambda 和常规函数的区别:

1,匿名函数lambda 是一个表达式,并不是一个语句

什么是表达式和语句呢?

表达式简单的可以认为,用一系列“公式”去表达一个东西,比如a+b、 c**4等等;

语句可以认为,一定是完成了某些功能,比如赋值语句a = 2完成了赋值,print 语句print(x)完成了打印,条件语句 if x < 0:完成了选择功能等等。

因此,匿名函数lambda 可以用在一些常规函数 def 不能用的地方,比如,lambda 可以用在列表(list)内部,而常规函数却不能:

再例如,lambda 可以被用作某些函数的参数,而常规函数 def 也不能:

常规函数 def 必须通过其函数名被调用,因此必须首先被定义。但是作为一个表达式的 lambda,返回的函数对象就不需要名字了。

2,lambda 的主体是只有一行的简单表达式,不能扩成一个多行的代码块。

这主要是出于设计的考虑。Python 发明 lambda,是为了让lambda和常规函数各司其职:lambda 专注于简单的任务,而常规函数则负责更复杂的多行逻辑

3,常规函数在定义时必须有函数名,而匿名函数没有函数名。常规函数的函数体中一般由多条语句组成,而匿名函数的函数体中仅只有一个表达式,这是由于匿名函数设计的目的是处理简单事务。

4,常规函数可以用于实现复杂的功能和简单的功能,而匿名函数只能实现简单的功能。

举报/反馈