Python Lambda的使用

一、Lambda的直观含义

python lambda表达式 if else_Python

上面是Python里面Lambdas文档的截图,划个重点,就是简洁的匿名函数

原先的函数如下:

def <lambda>(arguments):
	return expression

通过Lambda表达式,可以简化成如下形式:

"lambda" [parameter_list]: expression
二、直接定义Lambda
  1. 单个参数的情况
f = lambda x: -x
print(f(2))
print(f(-3))

我们直接定义了一个lambda函数,输入x,返回x的负数

输出为

-2
3
  1. 多个参数的情况
    正如一个函数有多个参数,lambda函数同样可以有多个参数
f = lambda x, y: x * y
print(f(2, 3))
print(f(-3, -3))

输出为

6
9
  1. 多个返回值的情况
    lambda函数可以有多个返回值,不过返回值需要显示地用tuple来封装
f = lambda x, y: (x * y, x - y)
a, b = f(2, 3)
print(a)
print(b)

这里a对应的是x*y,b对应的是x-y,输出为

6
-1
三、结合其他函数的进阶用法

在此之前,先介绍一下Python中的filter函数

python lambda表达式 if else_Python_02

filter函数的形式为filter(Iterator[_T], Generic[_T])这其中Iterator是一个函数,Generic是一个可迭代对象,通过filter函数,我们可以有效地过滤出我们想要的内容(即Iterator函数中返回值为True的内容)

举个例子,定义一个list和一个判断是否小于0的函数

nums = [1, -2, -4, 5, 1, -9]


def less_than_0(num):
    return num < 0


for i in filter(less_than_0, nums):
    print(i)

这里面,less_than_0是Iterator,即函数;nums是Generic,即可迭代对象

返回的filter(less_than_0, nums)是一个filter类的对象,是一个可迭代对象,因此我们可以使用for语句进行遍历,遍历得到的结果是所有的负数

-2
-4
-9

基本的知识讲完了,接下来,进行和lambda相关的讲解

  1. filter函数
    可以看出来,上一个例子还需要单独定义一个less_than_0函数,来实现这个功能,属于是有些麻烦了。因此,我们使用lambda函数来简化这个式子:
nums = [1, -2, -4, 5, 1, -9]


for i in filter(lambda x: x < 0, nums):
    print(i)

可以看出,通过使用lambda表达式,我们使用了一个匿名函数,取代了自己定义less_than_0函数的步骤,一定程度上简化了我们的操作

  1. map函数
    和filter函数不同,map函数的主要功能是将一个值映射成另一个值,通过函数的关系,对于一个list,如果我们想快速求出这个list的绝对值形式,可以采用lambda函数快速解决:
for i in map(lambda x: abs(x), nums):
    print(i)

输出为:

1
2
4
5
1
9

对比下面这种传统的方法,是不是优雅了不少呢?

for i in nums:
    print(abs(i))
  1. sorted函数
    sorted函数的形式如下:

key参数是给定一个函数,用于映射可迭代对象中的元素,之后会根据映射后的结果对该可迭代对象进行生序或者降序的排序,很显然,这个key也可以被我们采用lambda表达式来代替

for i in sorted(nums, key=lambda x: abs(x)):
    print(i)

上述表达式的作用就是对nums的绝对值形式进行升序的排序,最后的输出结果为:

1
1
-2
-4
5
-9

四、总结

Python中lambda表达式优势主要体现在下面几点:

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