============================

用一个简单的例子来理解python高阶函数

============================

最近在用mailx发送邮件, 写法大致如下.
echo 'body'|mailx -s 'title' 'a@corp.com,b@corp.com'
不知什么原因, 在一台机器上只要mailTo中包含空格, 邮件就发送不出去. 所以需要对收件人做规范化处理, 即去除空格, 去除多余的逗号.

这个处理过程使用到了map()和reduce(), 使用情形很简单, 更有助于理解这两个函数的作用.

#原始的mailTo
mailToStr=',a@corp.com ,, c@corp.com,e@corp.com,'
#该字符串中, 有空邮箱地址, 还有邮箱前后带空格 #step 1: 先转换成list
mailTo=mailToStr.split(',')
#结果为, ['', 'a@corp.com ', '', ' c@corp.com', 'e@corp.com', ''] #step 2:对list中元素做trim
mailTo=map(lambda x: x.strip(),mailTo)
#结果为, ['', 'a@corp.com', '', 'c@corp.com', 'e@corp.com', ''] #step 3: 去除list中的那几个空邮箱地址了
def exceptEmpty(x,y):
if x=='':
return y
elif y=='':
return x
else:
return x+','+y mailToStr=reduce(exceptEmpty,mailTo)
#mailToStr的结果是 'a@corp.com,c@corp.com,e@corp.com'

============================
总结一下 map/reduce/zip/filter几个高阶函数的作用

============================

map()函数, 我们需要提供2个参数, 第1个是lambda表达式或函数, 第2个参数是个list,
map()的作用是, 将list中的每个元素, 带到lambda表达式中求值, 最后再组成一个list.
比如,map(lambda x: x.strip(),['a@corp.com', 'c@corp.com']), 对每个元素都做了trim

reduce()函数, 我们需要提供2个参数, 第1个是lambda表达式或函数, 第2个参数是个list,
reduce()作用是, 将list中的相连的两个元素, 带入到lambda表达式中做"递归"求值, 最后生成一个scalar值.

zip()的作用是, 将两个list中的元素进行编织mesh.
zip([1,2,3],['a','b'])
#结果为[(1, 'a'), (2, 'b')]

filter()的作用是很直观, 对于给定的list, 按照我们设定的lambda表达式条件, 过滤掉不符合的元素.
filter(lambda x: x>0, [-1,0,1,2])
#结果为[1,2]

补充一点, lambda 表达式, 冒号后为一个表达式, 不是 `return` 语句.

用一个简单的例子来理解python高阶函数的更多相关文章

  1. Python高阶函数_map/reduce/filter函数

    本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...

  2. python高阶函数的使用

    目录 python高阶函数的使用 1.map 2.reduce 3.filter 4.sorted 5.小结 python高阶函数的使用 1.map Python内建了map()函数,map()函数接 ...

  3. python高阶函数sorted

    原文 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因 ...

  4. Python高阶函数及函数柯里化

    1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...

  5. python——高阶函数:高阶函数

    python高阶函数 00初识高阶函数 一等公民 函数在python中是一等公民(First-Class Object),同样和变量一样,函数也是对象,只不过是可调用的对象,所以函数也可以作为一个普通 ...

  6. python 高阶函数之filter

    前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...

  7. Python高阶函数--map

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

  8. python 高阶函数 与关键字参数

    修饰器 之前我一直有一个疑惑,就是修饰器里面对函数的操作为什么不能直接写进函数里面就好了吗?何必这么麻烦呢,当我进一步理解之后,原来修饰器的作用就是完成那些不能写进函数里面的功能的,好比必须要等到函数 ...

  9. Python高阶函数(Map、Reduce、Filter)

    Map函数 map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 举例说明 比如我们有一个函数f(x)=x2,要把这个函数作用 ...

随机推荐

  1. oracle大数据量。表分区提示查询效率

    现在业务有一张usertrack 日志记录表.每天会产生30万条数据.数据量大查询效率会非常慢 所以我考虑通过表分区来提示效率  逻辑上是一张表.但是分区后会按照分区条件将数据分在不同的物理文件 优点 ...

  2. android.content.SharedPreferences.edit()

    今天在实现一个保存用户设置到SharedPreferences时,出现了一个不能将数据保存到SharedPreferences中的情况.经过仔细的分析得出: android.content.Share ...

  3. Scala类基础

    最近在开始学习Scala,本篇文章我们来讲解一下Scala中类的使用 class Counter { var defaultValue = 0 val valValue = 0 private var ...

  4. 屠蛟之路_重伤的屠蛟俊_ThirdDay

    在屠蛟少年们重登数据库大山的途中,少年屠蛟俊(511)实力扛把子,一直坚持在队伍前头开路引领.披荆斩棘,却也因为一路与险水恶林.狂禽猛兽做战斗而精力受损,最终一不小心坠进beta怪蛟设置的陷阱深洞里, ...

  5. Visual Studio 2013小技巧

    Ctrl + F10 可以直接运行到光标处,而不用F10 逐过程 F11 逐语句了 当有多个断点时,按F5可以切换到下一个断点.

  6. 【Alpha阶段】第六次Scrum例会

    会议信息 时间:2016.10.27 21:30 时长:30min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个人任务报告 姓名 今日已完成Issue 明日计划Issue 工作困难 今日 ...

  7. 嵌入式Linux系统开发环境搭建

    Linux kernel Complier: http://supportopensource.iteye.com/blog/680483 sudo make mrproper         净化解 ...

  8. 复习---JS-Array 对象

    要开始做第一个js练习了.前面三个小题都是数组的.先来复习一下数组.如下是W3C上面的关于数组的内容. 之前笔记中的内容:http://www.cnblogs.com/lal-fighting/p/5 ...

  9. photobooth.js jquery

    <div id="example" class="photobooth" style="width:758px;height:400px&quo ...

  10. Linux 下 Oracle 内核参数优化

    数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块.而操作系统则是Oracle稳定运行与最大化性能的基石.本文主要描述基于Linux系统下 Or ...