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
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP