Lambda 算子、过滤、缩减和映射

本文介绍了 Python 中的 lambda 函数、map()、filter() 和 reduce() 的使用。lambda 函数用于创建一次性匿名函数,map() 可以将函数应用到序列的所有元素上,filter() 用于过滤序列中的元素,而 reduce() 则用于将函数连续应用到序列中以得到单一结果。在 Python 3 中,reduce() 被移至 functools 模块。
摘要由CSDN通过智能技术生成

环作为 for 循环的符号

如果编程语言 Python 的作者 Guido van Rossum 有他的意愿,我们的教程中就会缺少这一章。在他 2005 年 5 月的文章“一切 Pythonic:Python 3000 中 reduce() 的命运”中,他给出了放弃 lambda、map()、filter() 和 reduce() 的原因。他预计会遭到 Lisp 和“伙计们”的抵制。令他没想到的是,这种对立的僵硬。差不多一年后,Guido van Rossum 写道:“经过这么多次为 lambda 提出替代方案的尝试之后,也许我们应该承认失败。我没有时间关注最近几轮,但我建议我们保留 lambda,以免在不可能的任务上浪费每个人的才能和时间。” 我们可以看到结果:lambda、map() 和 filter() 仍然是核心 Python 的一部分。只有reduce() 必须去;它移动到模块 functools 中。

他放弃他们的理由是这样的:

  • 有一个同样强大的替代 lambda、过滤器、映射和缩减,即列表理解
  • 列表理解(更明显,更容易理解
  • 同时拥有列表理解和“过滤、映射、缩减和 lambda”正在违背 Python 的座右铭“应该有一种明显的方法来解决问题”

有些人喜欢它,有些人讨厌它,许多人害怕 lambda 运算符。lambda 运算符或 lambda 函数是一种创建小型匿名函数(即没有名称的函数)的方法。这些函数是一次性函数,即它们只在创建的地方需要。Lambda 函数主要与 filter()、map() 和 reduce() 函数结合使用。由于 Lisp 程序员的需求,lambda 特性被添加到 Python 中。

lambda 函数的一般语法非常简单:

lambda 参数列表:表达式

参数列表由逗号分隔的参数列表组成,表达式是使用这些参数的算术表达式。您可以将函数分配给变量以为其命名。

以下 lambda 函数示例返回其两个参数的总和:

sum  =  lambda  x ,  y  :  x  +  y 
sum ( 3 , 4 )

输出:

7

上面的例子可能看起来像是数学家的玩具。一种形式主义,它把一个容易理解的问题变成一个抽象的更难理解的形式主义。最重要的是,我们可以通过使用以下常规函数定义来获得相同的效果:

def  sum ( x , y ):
    返回 x  +  y 
sum ( 3 , 4 )

输出:

7

我们可以向您保证,当您学会使用 map() 函数时,这种方法的优势将是显而易见的。

map() 函数

正如我们之前提到的,当与 map() 函数结合使用时,可以看出 lambda 运算符的优势。map() 是一个带有两个参数的函数:

r = 地图(功能,序列)

第一个参数 func 是一个函数的名称,第二个参数是一个序列(例如一个列表)seq。map() 将函数 func 应用于序列 seq 的所有元素。在 Python3 之前,map() 用于返回一个列表,其中结果列表的每个元素都是函数 func 应用于列表或元组“seq”的相应元素的结果。在 Python 3 中, map() 返回一个迭代器。

下面的例子说明了 map() 的工作方式:

def 华氏度( T ): 
    return  (( float ( 9 ) / 5 ) * T  +  32 ) 
def  celsius ( T ): 
    return  ( float ( 5 ) / 9 ) * ( T - 32 )
温度 =  ( 36.5 ,  37 ,  37.5 ,  38 ,  39 ) 
F  = 地图(华氏, 温度)
Ç  = 地图(摄氏, ˚F )
temperatures_in_Fahrenheit  = 列表地图(华氏, 温度))
temperatures_in_Celsius  = 列表地图(摄氏, temperatures_in_Fahrenheit ))
打印(temperatures_in_Fahrenheit )
打印(temperatures_in_Celsius )

输出:

[97.7, 98.60000000000001, 99.5, 100.4, 102.2]
[36.5, 37.00000000000001, 37.5, 38.00000000000001, 39.0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值