温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何分析Python中的Lambda和Map及Reduce

发布时间:2021-12-09 11:21:07 来源:亿速云 阅读:118 作者:柒染 栏目:大数据

这篇文章给大家介绍如何分析Python中的Lambda和Map及Reduce,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

今天要和大家分享的是Python匿名函数(anonymous functions),也叫lambda函数。匿名函数的意思就是说这个函数没有显式的函数名,因为一般在Python中定义函数的时候都是这个样子的,def function_name(参数列表): balabalaba。暂且把具有function_name的函数称作常规函数,而匿名函数就称作lambda函数。匿名函数没有显式的函数名,但是有显式的lambda标志,写了lambda的函数就可以称作匿名函数。一般情况大家不愿意用匿名函数(因为他

们不会用!),但是无论是Python的书还是网络教程,都会讲这个,而且是开始比较基础的部分,而匿名函数刚开始学又比较抽象,所以有必要给大家安利一下这个坑到底是什么!下面开始栗子讲解.

# lambda 

"""
>>> def function_1(x, y):
      return x + y

>>> function_2 = lambda x,y: x + y
>>>
>>> function_1(1,2)
3
>>> function_2(1,2)
3
"""

通过这个栗子我们发现,function_1和function_2都可以用相同方式来调用。

区别在于匿名函数没有return语句,而匿名函数的返回值就是它定义的表达式。

匿名函数的生存周期就是在当前行,就是在那定义的,就在那里用,过了这村,后面就再不用他了。这也暗示了匿名函数为啥没有函数名,因为不会再用它啊,取个名字也是浪费感情。

# map()函数说明

一般和lambda表达式同时出现的还有map和reduce函数,接下来我们再看看

这是什么鬼。你可能听说过Hadoop里面的Map-Reduce过程,这里的和那个的

原理是类似的。map的意思不太好翻译,这样理解一下,有一个函数A,一个需要计算的对象B,把A map一下到B那么都对B里的每一个元素都使用了函数A。

接下来举个计算三角函数值的栗子。

import math
def function_5(x):
   return math.sin(x)

>>> list_1 = [-math.pi/4, math.pi/4]
>>> map(function_5, list_1)
[-0.7071067811865475, 0.7071067811865475]

如果我们不用常规函数,而是用lambda表达式,则

>>> map(lambda x: math.sin(x), list_1)

原来要用3行的代码,现在只要1行就可以搞定。

# reduce函数

如果我们直接reduce刚才定义的函数,看下会发生什么。

>>> reduce(function_5, list_a)

Traceback (most recent call last):
 File "<pyshell#22>", line 1, in <module>
   reduce(function_5, list_a)
TypeError: function_5() takes exactly 1 argument (2 given)

TypeError,类型错误,它说function_5本来只要1个参数,而你给了2个。

哪里来的两个?因为我们的list_1中有2个元素,就是这么来的。

# reduce的语法是:

reduce(function, seq)

reduce会根据function的表达式,来依次计算seq中的元素。

还是举个栗子好了。

>>> reduce(lambda x,y: x+y, [47,11,42,13])
113
113 <== (((47 + 11) + 42) + 13)
# 计算一下1到100的和。
>>> reduce(lambda x, y: x+y, range(1,101))
5050

刚才我们的map函数返回值是多个,而reduce则只返回一个值。注意这里的区别。

# 是不是很简单 ?

在Python 3里面,reduce函数被放到了functools模块里面,要用的话,需要from functools import reduce。

关于如何分析Python中的Lambda和Map及Reduce就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI