持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
前言
说到lambda,大家都不会陌生,就算没用过也见过。通过lambda的使用,可以不用定义函数从而实现某些功能。那么lambda有哪些特点及用法呢?和本文一起一探究竟。
lambda的定义及特点
lambda也称为匿名函数,不用def只用一行表达式也能实现函数功能。用完之后,从Python内存机制来看,lambda没有了引用,因此也会被销毁。总结3个特点:
- 一行简单表达式实现函数功能
- 没有函数名,而是一个表达式
- 用完就被销毁
来看看lambda的语法:
lambda arg_list: expression
语法很简单,以lambda关键字起头,随后arg_list是要传的参数列表,expression是包含参数的表达式。
lambda的使用
简单例子
先来看个最简单的例子:
lambda a: a * 2
例子很简单,接收参数a,返回值= a * 2。如果我们用函数来写是这样的:
def func(a):
return a * 2
可以看出,lambda表达式更简洁,在实现简单功能时更方便。
我们看看执行lambda例子的结果:
In [18]: lambda a: a * 2
Out[18]: <function __main__.<lambda>(a)>
返回结果是一个lambda的对象。那么如果我们要得到返回值该怎么写呢?先来个印象写法:
In [19]: a = 1
In [20]: b = lambda a: a * 2
In [21]: b
Out[21]: <function __main__.<lambda>(a)>
结果还是lambda对象,说明写法不对。正确的写法如下:
b = (lambda a: a * 2)(1)
多参数用法
上面例子是单个参数的使用,再来看看多参数的使用。参数arg_list用逗号隔开,传参的时候也用逗号隔开,看个例子。
res = (lambda a, b, c: a * b * c)(1, 2, 3)
将lambda函数作为参数
在Python中,lambda函数还可以作为某些内置函数的参数。内置函数包括有:filter、sorted、map等。我们来看个lambda在filter中的使用。
alist = [1,2,3,4,5,6]
filter(lambda x: x % 2 = 0, alist)
运行之后得到的是filter对象,我们用list()获取对象中的元素。
In [32]: list(filter(lambda x: x % 2 == 0, alist))
Out[32]: [2, 4, 6]
lambda在pandas中的使用
lambda在pandas中使用更广泛,因为我们经常要对某些行列进行清洗或运算,lambda、assign配合apply使用很方便。
来看个例子,我们要取col列的平方,那么可以这么写:
df['col'] = df['col'].apply(lambda x: x **2)
lambda小结
从例子可看出,lambda的使用很便捷,但也主要用于替代简单功能的函数,如果是功能复杂的函数功能,lambda就有点有心无力了。我们在实际工作中,如果是简单功能的函数,可用lambda来处理,或者是在pandas处理数据时,lambda也是个利器。但复杂的函数功能,还是老老实实用函数实现吧。