lambda函数与map函数

lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:

def f(x):

   return x**2

print f(4)

Python中使用lambda的话,写成这样

g = lambda x : x**2

print g(4)

Python中的lambda用武之地其实不是的主要有:

使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

使用lambda在某些时候让代码更容易理解。

lambda基础

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]

>>> print filter(lambda x: x % 3 == 0, foo)

[18, 9, 24, 12, 27]

>>> print map(lambda x: x * 2 + 10, foo)

[14, 46, 28, 54, 44, 58, 26, 34, 64]

>>>

>>> print reduce(lambda x, y: x + y, foo)

139

非lambda不可?

上面例子中的map的作用,和C#的Where扩展方法一样,非常简单方便。但是,Python是否非要使用lambda才能做到这样的简洁程度呢?在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。比如上面map的例子,可以写成:

print [x * 2 + 10 for x in foo]

非常的简洁,易懂。filter的例子可以写成:

print [x for x in foo if x % 3 == 0]

同样也是比lambda的方式更容易理解。

所以,什么时候使用lambda,什么时候不用,需要具体情况具体分析,只要表达的意图清晰就好。一般情况下,如果for..in..if能做的,我都不会选择lambda。

python中map()函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果希望把list的每个元素都作平方,就可以用map()函数:

因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算:

def f(x):

    return x*x

print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

输出结果:

[1, 4, 9, 10, 25, 36, 49, 64, 81]

注意:map()函数不改变原有的 list,而是返回一个新的 list。

利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。

由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list,事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。

示例:

假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:

输入:['adam', 'LISA', 'barT']

输出:['Adam', 'Lisa', 'Bart']

方法:

def format_name(s):

return s.capitalize()

print map(format_name, ['adam','LISA','barT'])

结果:

>>>

['Adam','Lisa','Bart']

如果函数有多个参数, 但每个参数的序列元素数量不一样, 会根据最少元素的序列进行:

>>> listx = [1,2,3,4,5,6,7]    # 7 个元素

>>> listy = [2,3,4,5,6,7]        # 6 个元素 

>>> listz = [100,100,100,100]    # 4 个元素

>>> list_result = map(lambda x,y,z : x**2 + y + z,listx, listy, listz)

>>> print(list(list_result)) 

[103, 107, 113, 121]

明显可以看出是由于 lambda 中的 z 参数,实际是使用了 listz, 而 listz 里面只有 4 个元素, 所以即使 listx 有 7 个元素, listy 有 6 个元素,也不会继续执行了,只执行了 4 个元素的的计算。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,238评论 1 118
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,440评论 17 410
  • 送教下乡,是优秀教师传送经验,提供示范的有效途径,旨在增进城乡教师的相互学习,既使作课教师从中得到磨练,又使听...
    微凉1阅读 2,958评论 0 0
  • 醉眼微眯 你入了我的梦 挣扎着想要清醒 看清你秀丽的容颜 天际的微光 穿破了地平线 透过窗户 直射我的笑脸 如花的...
    浩宇_90阅读 1,279评论 2 0
  • 第二天,天还蒙蒙亮,就听见外门院子里搬动行李的声音。温若萱一直有一点起床气。外面的声音实在很大,也只好慢慢地坐起来...
    枇杷姑娘阅读 2,435评论 0 0

友情链接更多精彩内容