用一个简单的例子来理解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高阶函数的更多相关文章
- Python高阶函数_map/reduce/filter函数
本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过 ...
- python高阶函数的使用
目录 python高阶函数的使用 1.map 2.reduce 3.filter 4.sorted 5.小结 python高阶函数的使用 1.map Python内建了map()函数,map()函数接 ...
- python高阶函数sorted
原文 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因 ...
- Python高阶函数及函数柯里化
1 Python高阶函数 接收函数为参数,或者把函数作为结果返回的函数为高阶函数. 1.1 自定义sort函数 要求:仿照内建函数sorted,自行实现一个sort函数.内建函数sorted函数是返回 ...
- python——高阶函数:高阶函数
python高阶函数 00初识高阶函数 一等公民 函数在python中是一等公民(First-Class Object),同样和变量一样,函数也是对象,只不过是可调用的对象,所以函数也可以作为一个普通 ...
- python 高阶函数之filter
前文说到python高阶函数之map,相信大家对python中的高阶函数有所了解,此次继续分享python中的另一个高阶函数filter. 先看一下filter() 函数签名 >>> ...
- Python高阶函数--map
map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把list 的每个元素依次作用在函数 f 上,得到一个新的 list 并返回. 例如,对于lis ...
- python 高阶函数 与关键字参数
修饰器 之前我一直有一个疑惑,就是修饰器里面对函数的操作为什么不能直接写进函数里面就好了吗?何必这么麻烦呢,当我进一步理解之后,原来修饰器的作用就是完成那些不能写进函数里面的功能的,好比必须要等到函数 ...
- Python高阶函数(Map、Reduce、Filter)
Map函数 map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 举例说明 比如我们有一个函数f(x)=x2,要把这个函数作用 ...
随机推荐
- WPF弹出取消确定框
MessageBoxResult dr = MessageBox.Show("是否在"+ConfigHelper.GetAppSetting("SourceDBName& ...
- dotnet文件操作
/// <summary> /// 创建文件夹 /// </summary> /// <param name="sender"></par ...
- Bzoj3663/4660 CrazyRabbit
题意:给定平面上一个圆和一堆圆外的点,要求选出尽可能多的点使得它们之间两两连线都不和圆相交.保证任意两点连线不和圆相切.点数<=2000 这题是很久以前在某张课件上看见的.看了题解还搞了三小时, ...
- struts2 CVE-2013-1965 S2-012 Showcase app vulnerability allows remote command execution
catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...
- python时间模块-time和datetime
时间模块 python 中时间表示方法有:时间戳,即从1975年1月1日00:00:00到现在的秒数:格式化后的时间字符串:时间struct_time 元组. struct_time元组中元素主要包括 ...
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
我们写界面要考虑很多用户体验问题,键盘事件的响应就是比较麻烦的一种.我们需要监听键盘事件,考虑点击背景收起键盘.考虑键盘遮挡输入框问题等等,而且每个界面都要做这么一套.这个库帮我们解决了这个事情. 这 ...
- VC++ 比较两个字符串是否相等,字母大小写相关。
1.strcmp 这是用于ANSI标准字符串的函数(如string和char *),此函数接受两个字符串缓冲区做为参数,如果两个字符串是相同的则返回零.否则若第一个传入的字符串的值大于第二个字符串返回 ...
- 翻译:通往WinDbg的捷径(一)
原文:http://www.debuginfo.com/articles/easywindbg.html译者:arhat时间:2006年4月13日关键词:CDB WinDbg 导言你钟情什么样的调试器 ...
- ejb 远程调用
1,客户端代码: package com.example.test; import java.util.Hashtable; import java.util.Properties; import j ...
- iOS - Runloop个人总结
调用堆栈: 程序运行之前,自上而下启动 iOS端用的所用系统framework都是动态链接的. dyld:The dynamic link editor 动态链接器