首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[编程经验]Python中的Lambda,Map, Reduce小结

[编程经验]Python中的Lambda,Map, Reduce小结

作者头像
用户1622570
发布2018-04-11 15:59:08
7960
发布2018-04-11 15:59:08
举报

今天要和大家分享的是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。

That‘s all!

每天进步一点点,日积月累,你就是那个可以把内裤穿在外面的人!加油哦~

本文为作者原创,如有雷同,必然是别人抄我的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习和数学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档