Python Lambda函数的工作原理

187 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

什么是Lambda函数?

Lambda函数类似于用户定义的函数,但没有名称。它们通常被称为匿名函数。

每当您想创建一个只包含简单表达式的函数时,Lambda函数都是高效的,即通常为语句的单行表达式。当您想使用该功能一次时,它们也很有用。

如何定义Lambda函数

您可以像这样定义lambda函数:

lambda argument(s) : expression
  1. lambda是Python中用于定义匿名函数的关键字。
  2. argument(s)是一个占位符,这是一个变量,将用于保存要传递到函数表达式中的值。lambda函数可以有多个变量,具体取决于您想要实现什么。
  3. 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函数的基础知识,以及如何通常应用它。感谢你抽出时间阅读这篇文章。