下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >编程语言 >说说Python中的几个内建函数和表推导

说说Python中的几个内建函数和表推导

课课家iOS游客发布于 2018-03-26 10:01查看:802回复:1

Guido 非常不喜欢lambdamapfilter以及reduce这几个函数式编程中的函数,他比较喜欢使用表推导。而且出于防止滥用的考虑,lamdba在Python中”享受”到了在其他语言中未曾遇到过的限制。

我个人也很喜欢表推导,不仅仅是速度快,而且看上去更pythonic,那么,上面说的几个函数是不是都可以用表推导代替呢?来做个试验。

map

最基本的lambda就是一个接受参数返回值的匿名函数,没有涉及到枚举,就不单独说了。直接把lambdamap组合起来用,map的作用是将一个函数映射到一个枚举类型上。比如求一个列表中所有值的三次方:

image.png

使用表推导:

image.png

没什么好说的, 表推导更简洁。注意map外面用了list这是Python3中的语法,因为在Python3中,mapfilter都从返回列表更改为返回迭代器了。

filter

filter返回可迭代对象传入function后返回值为True的item。

例如,返回一个列表中只含有字母的元素:

image.png

使用表推导

image.png

嗯,看上去还是表推导更好看,更容易理解

reduce

reduce稍微复杂一些,reduce是一种类似向左折叠列表的操作,按照可迭代对象的顺序迭代调用函数。并且要求函数接受两个参数。如果有第三个参数,则表示初始值。

一个简单的例子,求10的阶乘:

image.png

reduce还接受第三个参数,作为初始值,有时候我们是一定需要第三个参数的,例如在一段文本中查找某个单词出现的次数:

image.png

如果不使用默认值,第一个值就是大写字母’I’,显然不能用于计算出现的次数。

这种左乘的迭代操作,并不适合用表推导来实现。

当然为了表示我对表推导的支持,我把上面第二个reduce例子,用表推导实现了一下:

image.png

然而这并没有什么luan用,因为迭代求和求乘积的,还是reduce更好用。

apply

apply在Python3中已经被移除了,统一使用*将列表中的值作为参数传入。



收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有1条评论

    • IT宅男
    • mr jack
    • Mr ken
    • Mright
    • cappuccino
    • YUI
    • 课课家运营团队
    • 课课家技术团队1
    • 酸酸~甜甜
    • 选择版块:

    • 标题:

    • 内容

    • 验证码:

    • 标题:

    • 内容

    • 选择版块:

    移动帖子x

    移动到: