一文弄懂Python中的Lambda表达式

1. 引言

不管大家是Python新手还是老手 ,一定都听说过Lambda 函数。它的语法简单而且用起来相当方便。
在这里插入图片描述
本文主要是介绍Python lambda 函数的,为了阅读方便,分为以下 3 个部分来进行讲解——语法、用法和常见错误。

2. 语法

在Python中函数一般分为以下两种类型:

  • 普通函数 – 使用def关键字定义,并且有用户自定义的函数名
  • 匿名函数 – 使用lambda关键字定义,没有函数名

让我们来看个例子,不妨我们来定义一个普通函数来求解圆的周长,代码如下:

import math
def circle_circum(radius):
  return 2 * math.pi * radius

上述中,circle_circum为函数名,是由用户定义的,radius为输入参数。

接着我们来将上述函数修改成Lambda函数,代码如下:

import math
lambda radius: 2 * math.pi * radius

上述代码中,我们使用lambda关键字来替换def关键字,需要注意的是lambda函数为匿名函数,不需要指定函数名,并且没有显示的return关键字。

接着我们再来看一个含有多个参数的例子,比如计算长方形的面积,普通函数的代码实现如下:

def rect_area(length, width):
  return length * width

使用lambda函数的实现如下:

lambda length, width: length * width

因此,一般来说,Lambda函数的通用语法如下:

lambda <arguments>: <single expression>
  • 一个lambda函数可以有0个或多个参数,参数间使用逗号隔开
  • 一个lambda函数只能有一个表达式,该表达式根据参数来定义函数相关功能。
  • 表达式和参数之间使用分号隔开
  • 上述所有代码必须在一行的一个语句中完成

3. 用法

一般来说,在以下情形下lambda函数为首选:

  • 当只需要使用某函数一次调用时。
  • 在函数的定义中只有一个简单的表达式的时候。

在以下情形,并不推荐你使用lambda函数:

  • 当你需要重复使用某个函数多次时
  • 在函数实现中有多个复杂的表达式的时候

Lambda函数经常和 filter(),map(),reduce()以及sorted()函数搭配使用,以下举例来进行讲解。

3.1 Lambda with filter()

filter()函数为Python的内置函数,它主要用于从迭代数据类型(list tuple等)中根据条件来挑选元素,语法如下:

filter(function, iterable)

观察上述函数,我们可以把lambda函数作为filter()函数的参数。接下来我们来举个栗子:

iterable = [1, 3, 5, 6, 9, 11, 15, 16, 21]
list(filter(lambda x: x % 3 == 0, iterable))

上述代码,实现了从迭代列表中挑选出可以被3整除的元素,输出如下:

[3,6,9,15,21]

3.2 Lambda with map()

map()函数也是Python的内置函数之一,它可以将迭代类型的每一个元素进行相应的转换,语法如下:

map(function, iterable)

同理,我们也可以把lambda函数作为map()函数的参数。接下来我们来举个栗子:

iterable = [1, 3, 5, 6, 9, 11, 15, 16, 21]
list(map(lambda x: x ** 2, iterable))

上述代码,实现了对迭代列表中的每个元素执行求平方操作,输出如下:

[1,9,25,36,81,121,225,256,441]

3.3 Lambda with reduce()

reduce()函数不是Python的内置函数,它包含在functools里,需要专门导入。该函数可以对参数序列中的元素进行累计操作。语法如下:

reduce(function, iterable)

我们也可以把reduce()函数作为map()函数的参数。接下来我们来举个栗子:

# First import the reduce function
from functools import reduce
iterable = [1, 3, 5, 6, 9, 11, 15, 16, 21]
reduce(lambda x, y: x + y, iterable)

上述代码,实现了对迭代列表中的所有元素执行累加求和操作,输出如下:

87

3.4 Lambda with sorted()

sorted()函数是Python的内置函数之一,它可以用来将迭代类型中的元素进行升序或者降序排列,语法如下:

sorted(iterable, key, reverse)

上述声明中,sorted函数的默认值为reverse=False 即默认为升序排列,如果我们将其设置为True,那么排序将变为降序排列。我们来看个栗子:

iterable = [1, 5, 3, 9, 6, 11, 16, 21, 15]
sorted(iterable) # Ascending order

输出如下:

[1,3,5,6,9,11,15,16,21]

同时,对于参数key我们可以传递lamda函数来实现自定义的排序,样例如下:

iterable = [1, 5, 3, 9, 6, 11, 16, 21, 15]
sorted(iterable, key=lambda x: x % 5)

输出如下:

[5,15,1,6,11,16,21,3,9]

上述代码将列表中的元素按照对5求余后进行排序,排序的标准主要是通过lambda函数传递给参数key。

4. 常见错误

当你没有正常使用lambda函数时,会有错误出现。这里列举常见的几种错误类型。

4.1 语法错误

当我们忘记每个参数之间的逗号,或者忘记分隔表达式和参数名称之间的冒号,或者没有在一行中编写 Lambda 函数时,可能会发生这种情况。

举例如下:

iterable = [1, 3, 5, 6, 9, 11, 15, 16, 21]
reduce(lambda x y: x + y, iterable) # 缺失逗号
reduce(lambda x, y x + y, iterable) # 缺失分号
reduce(lambda x y: x +
       y, iterable)    # 多行

上述代码中,运行的错误提示如下:
在这里插入图片描述

4.2 类型错误

当我们在表达式中包含的参数名称多于参数部分中给出的参数名称时,就会发生这种情况。举例如下:

iterable = [1, 3, 5, 6, 9, 11, 15, 16, 21]
reduce(lambda x: x + y, iterable)

此时,上述代码运行的错误提示如下:
在这里插入图片描述

5. 总结

本文重点介绍了lambda表达式的语法,用法和常见错误,并详细地给出了代码示例和相应的讲解。

您学废了吗?

在这里插入图片描述
关注公众号《AI算法之道》,获取更多AI算法资讯。

参考

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵卓不凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值