Python 中的匿名函数是什么?


Python 中的匿名函数是在定义时没有名称的函数。在 Python 中,使用lambda关键字来定义匿名函数,而不是用于普通函数的def关键字。因此,lambda 函数是匿名函数的另一种名称。

语法

以下是 lambda 函数的语法:

lambda [args] : expression

虽然 lambda 函数只能有一个表达式,但它可以接受任意数量的参数。lambda 也可以立即调用,并且在一行代码中编写。

示例:调用 lambda 函数

lambda 函数以关键字 lambda 和参数 'm' 和 'n' 开头。':' 后返回方程 ‘½ *m * n’ 的值给调用者。为了使其可调用为命名函数,整个 lambda 函数 lambda ‘m,n : 1/2 * m * n’ 被赋予变量 ‘triangle’。如下所示,变量名称被转换为函数名称,以便像任何其他函数一样调用它。

# Finding the area of a triangle
triangle = lambda m,n : 1/2 * m * n
res=triangle(34,24)
print("Area of the triangle: ",res)

输出

以下是上述代码的输出:

Area of the triangle: 408.0 

替代方案

以下是定义匿名函数的另一种方法:

def triangle(m,n):
   return 1/2 * m * n
print(triangle(4,6))

输出

以下是上述代码的输出:

12.0

注意 - 表达式不一定要始终返回值。如下例所示的 lambda 函数不返回任何值:

company = lambda name: print('EdTech', name)
company('Tutorials Point')

注意 - lambda 函数中只能有一个表达式。很明显,它不能替换其主体包含循环、条件语句等的函数。

将 lambda 函数与 Python 内置函数一起使用

使用 Python 的内置方法是一种简单有效的方法来执行 lambda 函数的操作。由于这些函数可以接受 lambda 作为参数并立即调用,因此这是可能的。当需要一个短暂的无名函数时,就会使用 lambda 函数。

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

使用 filter() 函数

使用 filter 函数,可以从元素列表中选择特定元素。任何迭代器,例如列表、集合、元组等,都可以用作序列。将要选择的元素将取决于预定义的约束条件。有两个参数:

  • 指定过滤约束的函数

  • 一系列任何迭代器,如列表、元组等。

示例

在下面给出的示例中,展示了在 filter() 函数中使用匿名函数 ‘lambda’。在第一行,定义了一个名为 ‘series’ 的数字列表。在这里,filter() 函数产生的过滤值在名为 'result' 的变量中声明。使用了一个 lambda 函数,该函数检查列表中的每个项目,如果它大于 ‘29’,则返回 true。然后,打印 filter 函数返回的结果:

series = [23,45,57,39,1,3,95,3,8,85]
result = filter (lambda m: m > 29, series)
print('All the numbers greater than 29 in the series are :',list(result))

输出

以下是上述代码的输出:

All the numbers greater than 29 in the series are : [45, 57, 39, 95, 85]

在 map() 函数中的使用

使用 map() 函数,可以对序列中的每个元素执行特定的操作。与 filter() 函数类似,它需要两个参数,即指定要对元素执行的操作的函数和一个或多个序列。

示例

以下是一个示例,用于展示在 map() 函数中使用匿名函数 ‘lambda’。在这里,我们定义了一个名为 series 的列表,其中包含许多项目。我们声明了 'result' 变量,它将保存映射的值。一个 lambda 函数,它迭代地评估列表中的每个数字并返回其立方。然后打印 map 函数的结果。

# printing the cube of numbers given in the list
series = [23,5,1,7,45,9,38,65,3]
result = map (lambda m: m*m*m, series)
print('The cube of each element in the list are :',list(result))

输出

以下是上述代码的输出:

The cube of each element in the list are : [12167, 125, 1, 343, 91125, 729, 54872, 274625, 27]

在 reduce() 函数中的使用

map() 函数类似,reduce 函数用于对序列中的每个元素执行操作。不过,它的工作方式与 map 不同。reduce() 函数在获得输出之前执行以下步骤:

  • 对序列的前两个项目应用指定的操作。

  • 存储此结果。

  • 使用先前保存的结果和序列的后续元素执行操作。

  • 继续,直到没有更多元素。

还有两个额外的参数:

  • 指定要执行的操作的方法

  • 一系列任何迭代器,如列表、元组等。

注意 - reduce() 函数是从名为functools的模块导入的。此模块提供高阶函数,例如 reduce()、wraps()、cache() 等。

示例

在以下示例中,展示了在 reduce() 函数中使用匿名函数 ‘lambda’。从functools 模块导入reduce() 函数。在这里,我们定义了一个名为 'series' 的列表,其中包含许多项目。我们声明了一个 'sum' 变量,它将保存缩减的值。给出一个 lambda 函数,它迭代每个列表项。然后它将为您提供这些数字的总和的结果。

# printing the sum of numbers given in the list from functools
from functools import reduce 
series = [23,5,1,7,45,9,38,65,3]
sum = reduce (lambda m,n: m+n, series)
print('The total sum of all the elements in the list is :',sum)

输出

以下是上述代码的输出:

The total sum of all the elements in the list is : 196

更新于:2022-12-19

20K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.