如何分析Python中的Lambda和Map及Reduce
这篇文章给大家介绍如何分析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 "", line 1, in
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就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。