Python函数式编程 - zip| map| filter| reduce

Python中有很多函数式编程的方法,本文介绍的是最常见的几个函数

注:本文基于python2.7。不同的版本可能会导致差异

Zip - 集资

标准格式zip(seq[, seq[, seq]])

举个栗子:

a = (i for i in range(3))

b = [4,5,6]

c = (7,8,9)

abc = zip(a, b, c)

abc的结果为[(0, 4, 7), (1, 5, 8), (2, 6, 9)]

所以zip函数的作用已经很明显了,它就好比abc三家集资,一家出一个.

那当c家很富,a家没那么富怎么办呢?

a = (i for i in range(2))

b = [4,5,6]

c = (7,8,9,10)

abc = zip(a,b,c)

abc三家集资的结果为[(0, 4, 7), (1, 5, 8)],说好的一家出一个,你家没有了,那我也就不出了(你看,代码也这么现实…)

之所以举的栗子不全是list,就是想说明一个小的注意点,zip接受的都是具有迭代的属性的参数(__iter__),这个后面会讲

Filter - 审查

标准格式filter(func, seq)

举个栗子:

a = [1,2,3]

b = [4,5,6]

c = [7,8,9]

result = filter(lambdax: sum(x)>14, [a, b, c])

result为[[4, 5, 6], [7, 8, 9]]

现在有一个项目,但是这个项目要有个资产审查,要求资产满足lambda标准的企业才有资格参加招标(func是一个bool类型的函数)

Map - 招标

标准格式map(func, seq[, seq[, seq]])

举个栗子:

a = (i for i in range(3))

b = [4,5,6]

c = (7,8,9)

abc = map(lambdax,y,z: x+y+z, a, b, c)

abc的结果为[11, 14, 17]

还是这个招标的项目lambda函数需要招三家(函数的参数个数)来参与这个项目,这个项目分前中后三期的投入.

假如abc三家幸运的入选,并且三家都已经准备好了三个阶段的投入.所以前期a出0,b出4,c出7投入到lambda项目,项目前期返回收入11

依次类推,直到三家的投入全部结束,所以返还的收入就是[11, 14, 17]

假如c有钱(c = [7,8,9,10,11]),c说:老子有钱,我要追加投入. 那ab没钱怎么办?简单!!ab就诚实的说:老子没钱 就好了(a = [0,1,2,None,None], b = [4,5,6,None,None])

所以lambda项目就收到到这样的投入[None,None,10], [None,None,11],这里要注意处理这些None,因为不小心他就会报NoneType的问题

a = (i for i in range(3))

b = [4,5,6]

c = (7,8,9,10,11)

abc = map(lambdax,y,z: str(x)+str(y)+str(z), a, b, c)

所以abc的结果为['047', '158', '269', 'NoneNone10', 'NoneNone11']

map接受的也都是具有迭代的属性的参数

注意,当func为None的时候,map的功能就类似与zip了.说到底map也就是先集资(zip)再干事(func),func不存在的时候就剩集资(zip)了

Reduce - 二次投入

标准格式reduce(func, seq[, init])

举个栗子:

a = (i for i in range(3))

result = reduce(lambdax,y: x+y, a)

result为3

reduce的工作流程为:

1.func(seq[0], seq[1]) ->seq的第一和第二元素应用到func

2.func(func(seq[0], seq[1]), seq[2]) ->上一步func的结果作为func的第一个参数,seq第三个参数作为func的第二个元素

……

n.func(...func(func(seq[0], seq[1]))...,seq[n]) ->上一步func的结果作为func的第一个参数,seq第n个参数作为func的第二个元素

下图可以很好的说明这个过程:


以上是init不存在的时候,当init存在的时候,第一步的func的第一个参数为init,seq的第一个元素为func的第二参数,后面流程就一样了

这就好比把第一阶段的盈利当作二次投资的资本在进行投资。

结语

在python中函数式编程能很大程度上节约我们的开发时间,利用好了就会是自己的一大利器

文中提到的好比在可能会有不当,毕竟不是经济专业的….海涵

That's all,Thank you

更多请参阅4coding

<<<<<<<< 原创 转载请注明出处 >>>>>>>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容