Python lambda表达式及用法

lambda 表达式是现代编程语言引入的一种语法。如果函数是命名的、易于重复使用的代码块,则 lambda 表达式是一个功能更灵活的代码块,可以在程序中传输和调用。
回顾局部函数
get_math_func() 函数将返回三个局部函数之一。函数代码如下:
defget_math_func(type): #定义三个局部函数 ... #返回局部函数 iftype=="square": returnsquare iftype=="cube": returncube else: returnfactorial
由于默认情况下局部函数的作用域只停留在其封闭函数中,这三个局部函数的函数名的作用过于有限,即仅在程序中 if 作为返回值使用的句子。一旦离开 get_math_func() 函数体,这三个局部函数的函数名失去了意义。由于局部函数的函数名意义不大,考虑使用 lambda 表达式简化了局部函数的编写。
使用 lambda 替代局部函数的表达式
如果使用 lambda 简化表达式 get_math_func() 函数可以将程序改写成以下形式:
defget_math_func(type):
result=1
#这个函数返回Lambda表达式。
iftype=='square':
returnlambdan:n*n#①
eliftype=='cube':
returnlambdan:n*n*n#②
else:
returnlambdan:(1+n)*n/2#③
#调用get_调用get_math_func(),程序返回嵌套函数
math_func=get_math_func("cube")
print(math_func(5)#输出125
math_func=get_math_func("square")
print(math_func(5)#输出25
math_func=get_math_func("other")
print(math_func(5)#输出15.0在上述代码中,return 使用后部 lambda 定义关键词是 lambda Python要求表达式 lambda 表达只能是单行表达。
注:由于lambda表达式只能是单行表达式,因此不允许使用更复杂的函数形式③将编号代码处改为计算1+2+3+..+n的总和。
lambda 表达式语法格式如下:
lambda[parameter_list]:表达式
从上述语法格式可以看出 lambda 表达式的几个要点:
lambda 必须使用表达式 lambda 定义关键字。
在 lambda 在关键字之后,参数列表位于冒号的左侧。可以没有参数,也可以有多个参数。如果有多个参数,则需要用逗号将其分开。冒号的右侧是 lambda 表达式返回值。
实际上,lambda 表达式的本质是匿名和单行函数体的函数。因此,lambda 表达式可以写成函数的形式。例如,对于以下内容 lambda 表达式:
lambdax,y:x+y
可以改写为以下函数形式:
defadd(x,y):returnx+y在定义函数时使用简化语法:当函数体只有一行代码时,可以直接将函数体的代码放在与函数头相同的行中。
一般来说,函数比 lambda 表达式的适应性更强,lambda 表达式只能创建一个简单的函数对象(只适用于单行函数体)。但是 lambda 表达式仍有以下两个用途: 使用单行函数 lambda 表达式可以节省定义函数的过程,使代码更加简洁。 对于不需要多次重复使用的函数,使用 lambda 使用后可立即释放表达式,提高性能。 通过了下面的代码示范 lambda 调用表达式 Python 内置的 map() 函数: 正如上述代码所看到的,内置的 map() 函数的第一个参数需要传入函数,这里传入函数的简化形式:lambda 表达式,使程序更简洁,性能更好。#lambda表达式作为输入计算平方的参数
x=map(lambdax:x*x,range(8))
print([eforeinx])#[0,1,4,9,16,25,36,49]
#lambda表达式作为输入计算平方的参数
y=map(lambdax:x*xifx%2==0else0,range(8))
print([eforeiny])#[0,0,4,0,16,0,36,0]
