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.