📜  Python lambda (匿名函数) | filter, map, reduce

📅  最后修改于: 2020-07-15 08:53:31             🧑  作者: Mango

在Python中,匿名函数意味着函数没有名称。我们已经知道def关键字用于定义普通函数,而lambda关键字用于创建匿名函数。它具有以下语法:

lambda arguments: expression
  • 该函数可以有任意数量的参数,但只能有一个表达式,该表达式将被求值并返回。
  • 可以在需要函数对象的任何地方免费使用lambda函数。
  • 您需要知道,lambda函数在语法上仅限于单个表达式。
  • 除了函数中的其他类型的表达式外,它在编程的特定领域也有多种用途。

让我们看一下这个示例,尝试理解普通def定义的函数和lambda函数之间区别。这是一个返回给定值的多维数据集的程序:

# Python代码来说明显示def()和lambda()之间差异的数字立方体. 
def cube(y): 
    return y*y*y; 
  
g = lambda x: x*x*x 
print(g(7)) 
  
print(cube(5)) 

输出:

343 
125
  • 不使用Lambda:在这里,它们两个都返回给定数字的多维数据集。但是,在使用def时,我们需要使用名称多维数据集定义一个函数,并且需要向其传递值。执行后,我们还需要使用return关键字从调用函数的地方返回结果。
  • 使用Lambda: Lambda定义不包含“ return”语句,它始终包含要返回的表达式。我们还可以将lambda定义放在需要函数的任何地方,而我们根本不必将其分配给变量。这就是lambda函数的简单性。

Lambda函数可以与filter(),map()和reduce()之类的内置函数一起使用。

将lambda()与filter()结合使用

Python中的filter()函数接受一个函数和一个列表作为参数。这提供了一种精巧的方法来过滤出序列“序列”的所有元素,为此函数返回True。这是一个小程序,可从输入列表中返回奇数:

# Python代码使用lambda()说明filter()
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] 
final_list = list(filter(lambda x: (x%2 != 0) , li)) 
print(final_list)

输出:

[5,7,97,77,23,73,61]

将lambda()与map()结合使用

Python中的map()函数接受一个函数和一个列表作为参数。该函数使用lambda函数调用,并有一个列表,并返回一个新列表,其中包含该函数为每个项目返回的所有lambda修改后的项目。例:

# Python代码使用lambda()说明map()以获取列表的两倍. 
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61] 
final_list = list(map(lambda x: x*2 , li)) 
print(final_list) 

输出:

[10、14、44、194、108、124、154、46、146、122]

将lambda()与reduce()结合使用

Python中的reduce()函数接受一个函数和一个列表作为参数。该函数用lambda函数和一个列表调用,并返回一个新的简化结果。这会对列表对执行重复操作。这是functools模块的一部分。例:

# Python代码用lambda()来说明reduce()以获取列表的总和 
from functools import reduce
li = [5, 8, 10, 20, 50, 100] 
sum = reduce((lambda x, y: x + y), li) 
print (sum) 

输出:

193