在Python中为什么使用lambda

通常来说,lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。在你仅需要嵌入小段可执行代码的情况下它们会带来一个更简洁的代码结构。
lambda通常用来编写跳转表(jump table),也就是行为的列表或字典,能够按照需要执行相应的动作。如下段代码所示。
l = [lambda x: x ** 2, # inline function definition
lambda x: x ** 3, lambda x: x ** 4] # a list of 3 callable functionsfor f in l:
print(f(2)) # prints 4,8,16print(l[0](3)) # prints 9
当需要把小段的可执行代码编写进def语句从语法上不能编写进的地方时,lambda表达式作为def的一种速写来说是最为有用的。例如,上面的代码片段,通过在列表常量中嵌入lambda表达式创建一个含有三个函数的列表。对等的def代码可能需要在想要使用的环境之外有临时性函数名称和函数定义。
def f1(x): return x ** 2
def f2(x): return x ** 3 # define named functions
def f3(x): return x ** 4
l = [f1,f2,f3] # reference by name
for f in l:
print(f(2)) # prints 4,8,16print(l[0](3)) # prints 9
实际上,我们可以用python中的字典或者其他的数据结构来构建更多种类的行为表,从而做同样的事情。下面给出另一个例子:
key = 'got'
{'already': (lambda: 2 + 2),
...'got': (lambda: 2 * 4),
...'one': (lambda: 2 ** 6)}[key]
name
for f in l:
print(f(2)) # prints 4,8,16print(l[0](3)) # prints 9
这里,当python创建这个字典的时候,每个嵌套的lambda都生成并留下了一个在之后能够调用的函数。如果不是用lambda做这种工作,需要使用三个文件中其他地方出现过的def语句来替代,也就是在这些函数将会使用的那个字典外的某处需要定义这些函数。
def f1(): return 2 + 2...
def f2(): return 2 * 4
...
def f3(): return 2 ** 6
...
key = 'one'
{'already': f1,'got': f2,'one': f3}[key]()
64
同样,上面代码会实现相同的功能,但是def也许会出现在文件中的任意位置,即使它们只有很少的代码。类似刚才lambda的代码,提供了一种特别有用的可以在单个情况出现的函数:如果这里的三个函数不会在其他的地方使用到,那么将它们的定义作为lambda嵌入在字典中就是很合理的了。不仅如此,def格式要求为这些小函数创建变量名,这些变量名也许会与这个文件中的其他变量名发生冲突。

基于FMI接口的协同仿真应用
你知道门锁的颜色组合吗?
香港航空正式宣布公司正在研究机队与航线网络整合计划
高通:全球5G部署取得令人惊叹的成绩
[原创] ADI ADM3055ECAN物理层收发器解决方案
在Python中为什么使用lambda
戴尔外星人Area-51m详细评测 到底有多强
华为创新2.0重点研究未来技术 光计算和DNA存储及原子制造
X-47B无人机系统的技术揭秘
运放技术:什么是等效输入噪声?噪声和带宽是什么关系?
芯片行业持续升温之下,芯片培训班也开始变得火爆
一文解析大众ID4.X的网络架构及各类控制器
谷歌和Labster宣布:大学将通过虚拟现实模拟实验代替现实实验室
数字源表优势介绍
柔性上料工作站的优势
2023全球工业互联网大会丨软通动力成功协办“工业互联网网络安全与数据安全专题论坛”
暑期自驾游最怕手机没电?不存在!华为快充来帮你
直线马达加持的CCD视觉检测设备展示出强大性能
录音软件不好用怎么办,好用的迅捷录音软件推荐
瑞丰光电Sun Feel新品荣获2018最佳LED光源技术创新奖