乐趣区

关于python:用一个简单的例子来理解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 技术大本营,获取更多技能与教程。

退出移动版