Menu Close

Python Lambda 匿名函数及其应用

在本文中,您将学习匿名函数,也称为 lambda 函数。 您将了解它们的含义,语法以及如何使用它们(包含示例)。

1. 什么是 Python 中的 lambda 函数?

在 Python 中,匿名函数是函数,其定义时没有名称。Python lambda 表达式允许您定义匿名函数。

匿名函数是没有名字的函数。匿名函数在您只需要使用一次时很有用。

一个 lambda 表达式通常包含一个或多个参数,但它只能有一个表达式。

使用 Python 中的def关键字定义普通函数时,使用lambda关键字定义匿名函数。

因此,匿名函数也称为 lambda 函数。

2. 如何在 Python 中使用 lambda 函数?

python 中的 lambda 函数具有以下语法。

python 中 Lambda 函数的语法

lambda arguments: expression

Lambda 函数可以具有任意数量的参数,但只能有一个表达式。 该表达式被求值并返回。 Lambda 函数可在需要函数对象的任何地方使用.

python 中的 Lambda 函数示例

例2.1 使输入值加倍的 lambda 函数示例。

# Program to show the use of lambda functions
double = lambda x: x * 2

print(double(5))

结果

10

在上述程序中,lambda x: x * 2是 lambda 函数。 这里x是自变量,x * 2是要求值并返回的表达式。

此函数没有名称。 它返回分配给标识符double的函数对象。 现在我们可以将其称为常规函数。 该声明

double = lambda x: x * 2

几乎与:

def double(x):
    return x * 2

一样。

例2.2 以下 times() 函数返回一个 lambda 表达式函数:

def times(n):
    return lambda x: x * n

这个例子展示了如何调用 times() 函数:

double = times(2)

由于 times() 函数返回一个函数,所以 double 也是一个函数。要调用它,请像这样放置括号:

result = double(2)
print(result)

result = double(3)
print(result)

结果

4
6

下面显示了使用 times() 函数的另一个示例:

triple = times(3)

print(triple(2)) # 6
print(triple(3)) # 9

lambda 函数

3.在 Python 中使用 Lambda 函数

当我们在短时间内需要无名函数时,我们使用 lambda 函数。

在 Python 中,我们通常将其用作高阶函数的参数(该函数将其他函数作为参数)。 Lambda 函数与filter(),map()等内置函数一起使用。

与filter()一起使用的示例

Python 中的filter()函数采用一个函数和一个列表作为参数。

将使用列表中的所有项目调用该函数,并返回一个新列表,其中包含该函数求值为True的项目。

这是使用filter()函数的示例,该函数仅从列表中过滤出偶数。

# Program to filter out only the even items from a list
my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(filter(lambda x: (x%2 == 0) , my_list))

print(new_list)

结果

[4, 6, 8, 12]

与map()一起使用的示例

Python 中的map()函数接受一个函数和一个列表。

将使用列表中的所有项目调用该函数,并返回一个新列表,其中包含该函数为每个项目返回的项目。

这是使用map()函数将列表中所有项目加倍的示例。

# Program to double each item in a list using map()

my_list = [1, 5, 4, 6, 8, 11, 3, 12]

new_list = list(map(lambda x: x * 2 , my_list))

print(new_list)

结果:

[2, 10, 8, 12, 16, 22, 6, 24]

4.循环中的 Python lambda函数

例4.1

callables = []
for i in (1, 2, 3):
    callables.append(lambda: i)

for f in callables:
    print(f())

以上程序如何运作?

  • 首先,定义一个名为 callables 的列表。
  • 其次,从 1 迭代到 3,在每次迭代中创建一个新的 lambda 表达式,并将其添加到 callables 列表中。
  • 第三,遍历可调用对象并调用每个函数。

预期的输出将是:

1
2
3

但是,该程序显示以下输出:

3
3
3

问题是所有的 lambda 表达式都引用了 i 变量,而不是 i 的当前值。当您调用 lambda 表达式时,变量 i 的值为 3。

要解决此问题,您需要在创建 lambda 表达式时将 i 变量绑定到每个 lambda 表达式。一种方法是使用默认参数:

callables = []
for i in (1, 2, 3):
    callables.append(lambda a=i: a)

for f in callables:
    print(f())

结果

1
2
3

在此示例中,在创建 lambda 表达式时计算 a 的值。因此,程序返回预期的输出。

READ  Python 面向对象编程

摘要:

  • 使用 Python lambda 表达式创建匿名函数,即没有名称的函数;
  • lambda 表达式接受一个或多个参数,包含一个表达式,并返回该表达式的结果;
  • 使用 lambda 表达式将匿名函数传递给一个函数并从另一个函数返回一个函数。

 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in Python教程

Related Posts