不管大家是Python新手还是老手 ,一定都听说过Lambda 函数。它的语法简单而且用起来相当方便。
本文主要是介绍Python lambda 函数的,为了阅读方便,分为以下 3 个部分来进行讲解——语法、用法和常见错误。
在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函数为首选:
在以下情形,并不推荐你使用lambda函数:
Lambda函数经常和 filter(),map(),reduce()以及sorted()函数搭配使用,以下举例来进行讲解。
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]
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]
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
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。
当你没有正常使用lambda函数时,会有错误出现。这里列举常见的几种错误类型。
当我们忘记每个参数之间的逗号,或者忘记分隔表达式和参数名称之间的冒号,或者没有在一行中编写 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) # 多行
上述代码中,运行的错误提示如下:
当我们在表达式中包含的参数名称多于参数部分中给出的参数名称时,就会发生这种情况。举例如下:
iterable = [1, 3, 5, 6, 9, 11, 15, 16, 21]
reduce(lambda x: x + y, iterable)
本文重点介绍了lambda表达式的语法,用法和常见错误,并详细地给出了代码示例和相应的讲解。
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。
参考