最近在用 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 技术大本营,获取更多技能与教程。