最近在用mailx发送邮件, 写法大抵如下.

echo 'body'|mailx -s 'title' 'a@corp.com,b@corp.com'

不知什么起因, 在一台机器上只有mailTo中蕴含空格, 邮件就发送不进来. 所以须要对收件人做规范化解决, 即去除空格, 去除多余的逗号.

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

#原始的mailTomailToStr=',a@corp.com ,, c@corp.com,e@corp.com,'#该字符串中, 有空邮箱地址, 还有邮箱前后带空格#step 1: 先转换成listmailTo=mailToStr.split(',')#后果为, ['', 'a@corp.com ', '', ' c@corp.com', 'e@corp.com', '']#step 2:对list中元素做trimmailTo=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+','+ymailToStr=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技术大本营,获取更多技能与教程。