最近在用mailx发邮件,写法大致如下。echo'body'|mailx-s'title''a@corp.com,b@corp.com'由于某种原因,只要mailTo在机器上有空格,邮件就发不出去。因此,收件人需要规范化,即去除空格和多余的逗号。此过程使用map()和reduce()。用法很简单,更有助于理解这两个函数的作用。#originalmailTomailToStr=',a@corp.com,,c@corp.com,e@corp.com,'#Inthisstring,有空邮箱地址,邮箱#前后有空格第一步:先转换为listmailTo=mailToStr.split(',')#结果为,['','a@corp.com','','c@corp.com','e@corp.com','']#step2:对列表中的元素执行trimmailTo=map(lambdax:x.strip(),mailTo)#结果是,['','a@corp.com','','c@corp.com','e@corp.com','']#step3:删除列表中的空电子邮件地址defexceptEmpty(x,y):ifx=='':returnyelify=='':returnxelse:returnx+','+ymailToStr=reduce(exceptEmpty,mailTo)#mailToStr结果是'a@corp.com,c@corp.com,e@corp.com'总结map/reduce/zip/filter几个高阶函数的作用map()函数,我们需要提供2个参数,第一个是lambda表达式或函数,第二个参数是一个列表,map的函数()是将列表中的每个元素带入lambda表达式进行求值,最终形成一个列表。例如map(lambdax:x.strip(),['a@corp.com','c@corp.com']),trimreduce()函数是对每个元素做的,我们需要提供2个参数,首先一个是lambda表达式或函数,第二个参数是一个列表。reduce()的作用是将列表中的两个连通元素带入lambda表达式进行“递归”求值,最终生成一个标量值。zip()的作用是将两个列表中的元素编织成网格。zip([1,2,3],['a','b'])结果为[(1,'a'),(2,'b')]filter()的作用很直观.对于给定的列表,根据我们设置的lambda表达式条件,过滤掉不满足的元素。filter(lambdax:x>0,[-1,0,1,2])结果是[1,2]还有一点,lambda表达式,冒号后面是表达式,不是return语句。以上就是本次分享的全部内容,现在想学习编程的朋友们,欢迎关注Python技术大本营,获取更多技巧和教程。
