持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
什么是Lambda函数?
Lambda函数类似于用户定义的函数,但没有名称。它们通常被称为匿名函数。
每当您想创建一个只包含简单表达式的函数时,Lambda函数都是高效的,即通常为语句的单行表达式。当您想使用该功能一次时,它们也很有用。
如何定义Lambda函数
您可以像这样定义lambda函数:
lambda argument(s) : expression
lambda
是Python中用于定义匿名函数的关键字。argument(s)
是一个占位符,这是一个变量,将用于保存要传递到函数表达式中的值。lambda函数可以有多个变量,具体取决于您想要实现什么。expression
是您想要在lambda函数中执行的代码。
请注意,匿名函数没有返回关键字。这是因为匿名函数一旦执行,将自动返回函数中表达式的结果。
让我们看看lambda函数的一个例子,看看它是如何工作的。我们将把它与常规的用户定义函数进行比较。
假设我想写一个函数,返回我传递的数字的两倍。我们可以将用户定义的函数定义如下:
def f(x):
return x * 2
f(3)
>> 6
现在对于lambda函数。我们将像这样创建它:
lambda x: x * 3
正如我上面解释的,lambda函数没有返回关键字。因此,它将自己返回表达式的结果。里面的x也是将值传递到表达式中的占位符。你可以把它改成你想要的任何东西。
现在,如果您想调用lambda函数,您将使用一种称为立即调用该函数的方法。看起来是这样的:
(lambda x : x * 2)(3)
>> 6
原因是,由于lambda函数没有您可以调用的名称(它是匿名的),因此您需要在调用它时附上整个语句。
你什么时候应该使用Lambda函数?
您应该使用lambda函数来创建简单的表达式。例如,不包括复杂结构的表达式,如if-else、For-loops等。
因此,例如,如果您想创建带有环的函数,您应该使用用户定义的函数。
Lambda函数的常见用例
如何将Lambda函数与迭代一起使用
可迭代本质上是由一系列值组成的任何东西,例如字符、数字等。
在Python中,可迭代包括字符串、列表、字典、范围、元组等。在处理可迭代函数时,您可以将lambda函数与两个常见函数结合使用:filter()
和map()
。
Filter()
当您想专注于可迭代中的特定值时,您可以使用过滤器功能。以下是过滤器函数的语法:
filter(function, iterable)
如您所见,过滤器函数需要另一个函数,该函数包含将在可迭代上执行的表达式或操作。
例如,假设我有一个列表,例如[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
现在假设我只对列表中的值感兴趣,当除以2时,这些值的余数为0。我可以使用filter()
和lambda函数。
首先,我将使用lambda函数创建我想导出的表达式,如下所示:
lambda x: x % 2 == 0
然后我会把它插入过滤器功能中,如下所示:
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter(lambda x: x % 2 == 0, list1)
>> <filter at 0x1e3f212ad60> # The result is always filter object so I will need to convert it to list using list()
list(filter(lambda x: x % 2 == 0, list1))
>> [2, 4, 6, 8, 10]
Map()
每当您想修改可迭代中的每个值时,您都会使用map()
函数。
map(function, iterable)
例如,假设我想将以下列表中的所有值提高到2的幂。我可以像这样轻松地使用lambda和映射函数做到这一点:
list1 = [2, 3, 4, 5]
list(map(lambda x: pow(x, 2), list1))
>> [4, 9, 16, 25]
### Pandas Series
当您从Pandas创建数据帧时,您将使用lambda函数的另一个地方是在数据科学中。系列是一个数据帧列。您可以使用lambda函数操作系列中的所有值。
例如,如果我有一个包含以下列的数据框架,并希望将名称列中的值转换为小写,我可以使用熊猫应用函数和像这样的Python lambda函数来做到这一点:
import pandas as pd
df = pd.DataFrame(
{"name": ["IBRAHIM", "SEGUN", "YUSUF", "DARE", "BOLA", "SOKUNBI"],
"score": [50, 32, 45, 45, 23, 45]
}
)
df["lower_name"] = df["name"].apply(lambda x: x.lower())
应用函数将把系列的每个元素应用于lambda函数。然后,lambda函数将根据您传递给它的表达式为每个元素返回一个值。在我们的案例中,表达式是小写每个元素。
结论
在本教程中,你学习了lambda函数的基础知识,以及如何通常应用它。感谢你抽出时间阅读这篇文章。