还不会用Python的lambda?这篇给你答案

364 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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也是个利器。但复杂的函数功能,还是老老实实用函数实现吧。