李宁老师已经在「极客起源」 微信公众号推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。读者可以在「极客起源」 公众号中输入 160442 开始学习。
--------------正文--------------
现在几乎所有的现代编程语言都支持lambda表达式,如果说函数是命名的、方便复用的代码块,那么 lambda表达式则是功能更灵活的代码块,它可以在程序中被传递和调用。
1. 先来回顾一下局部函数
在前面的文章已经介绍过了局部函数,现在让我们再回顾一下:
# 定义函数,该函数会返回局部函数的计算结果
由于局部函数的作用域默认仅停留在其封闭函数之内,因此这3个局部函数的函数名的作用太有限了,仅仅是在程序的if语句中作为返回值使用。一旦离开了multi_math_func函数体,这3个局部函数的函数名就失去了意义。既然局部函数的函数名没有太大的意义,那么就可以考虑使用 lambda表达式来简化局部函数的写法
2. 使用lambda表达式代替局部函数
如果使用 lambda表达式来简化上面的函数,则可以将程序改写成如下形式。
示例代码:lambda_test. py
# 定义函数,该函数会返回局部函数的计算结果
从这段代码可以看出,return后面的部分使用 lambda关键字定义的就是 lambda表达式,Python要求 lambda表达式只能是单行表达式。
由于 lambda表达式只能是单行表达式,所以不允许使用更复杂的函数形式,因此无法计算斐波那契数列,所以else子句中该成了计算平方的函数。
lambda表达式的语法格式如下:
lambda [parameter1ist]:表达式
从上面的语法格式可以看出 lambda表达式的几个要点。
lambda表达式必须使用 lambda关键字定义;
在 lambda关键字之后、冒号左边的是参数列表,可以没有参数,也可以有多个参数。如果有多个参数,则需要用逗号隔开,冒号右边是该 lambda表达式的返回值;
实际上, lambda表达式的本质就是匿名函数、而且这个匿名函数必须是单行的。因此, lambda表达式可以写成函数的形式。例如,对于如下lambda表达式。
lambda x, y: x+y
可改写为如下函数形式。
def add(x, y): return x+y
上面定义函数时使用了简化语法,当函数体只有一行代码时,可以直接把函数体的代码放在与函数头同一行。
总体来说,函数比 lambda表达式的适应性更强, lambda表达式只能创建简单的函数对象。 但 lambda表达式依然有如下2个用途:
对于单行函数,使用 lambda表达式可以省去定义函数的过程,让代码更加简洁;
对于不需要多次复用的函数,使用 lambda表达式可以在用完之后立即释放,,提高了性能;
下面的代码演示了通过 lambda表达式来调用 Python内置的map()函数的过程
示例代码: lambda_map_test.py
# 传入计算平方的lambda表达式作为参数
正如从上面代码所看到的,内置的map函数的第一个参数需要传入函数,此处传入了函数的简化形式: lambda表达式,这样程序更加简洁,而且性能更好。
往期回顾:
Python编程思想(18):哇!原来Python参数还可以这样用
Python编程思想(21):原来函数内部还可以定义函数(局部函数)
-----------------转发朋友圈,是对我最大的支持---------------------
喜欢作者的文章,请扫描关注 极客起源 公众号
本文分享自微信公众号 - 极客起源(geekculture)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。