Python入门笔记(21):Python函数(4):关于函数式编程的内建函数
一、关于函数式编程的内建函数

apply()逐渐被舍弃,这里不讨论
1、filter()
#filter(func,seq)
"""纯Python描述filter函数"""
def Myfilter(bool_func,seq):
filtered_seq = []
for obj in seq:
if bool_func(obj):
filtered_seq.append(obj)
return filtered_seq
print Myfilter(lambda x:x%3==0, [1,2,3,4,5,6,7,8,9]) #[3, 6, 9]
"""Build-In function filter()"""
print filter(lambda x:x%3==0, [1,2,3,4,5,6,7,8,9]) #[3, 6, 9]
"""非函数下的实现"""
print [x for x in [1,2,3,4,5,6,7,8,9] if x%3==0] #[3, 6, 9]
#还记得上一节写的,如果能有for..in..if(或列表解析)能处理的最好用这个而放弃lambda
试验:列表解析和lambda性能比较
lambda:
import time start = time.clock() filter(lambda x:x%3==0, [i for i in range(10000000)]) end = time.clock() print end-start #耗时4.9441799282
列表解析:
import time start = time.clock() [x for x in range(10000000) if x%3==0] end = time.clock() print end-start #耗时2.95589058109
从上可见,最好使用列表解析。
2、map()
"""纯Python模拟map()"""
def Mymap(func,seq):
mapped_seq = []
for obj in seq:
mapped_seq.append(func(obj))
return mapped_seq
print Mymap(lambda x:x*10,[i for i in range(10)]) #[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
"""内建map()函数"""
print map(lambda x:x*10,[i for i in range(10)]) #[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
"""非函数式编程"""
print [x*10 for x in range(10)] #[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
"""多个序列的map()"""
print map(lambda x,y:x+y,[1,2,3],[4,5,6]) #[5, 7, 9]
"""None与map()"""
print map(None,[1,2,3],[4,5,6]) #[(1, 4), (2, 5), (3, 6)]
"""None在map()中使用效果同zip(),将不相干的序列归并在一起"""
print zip([1,2,3],[4,5,6]) #[(1, 4), (2, 5), (3, 6)]
3、reduce()
"""纯Python模拟reduce()"""
def Myreduce(bin_func,seq,init=None):
Iseq = list(seq)
if init is None:
res = Iseq.pop()
else:
res = init
for obj in Iseq:
res = bin_func(res,obj)
return res
"""reduce()"""
综上,尽量用最简便的方式去实现。
Python入门笔记(21):Python函数(4):关于函数式编程的内建函数的更多相关文章
- Python学习(20):Python函数(4):关于函数式编程的内建函数
转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filte ...
- Python入门笔记(22):Python函数(5):变量作用域与闭包
一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...
- Python入门笔记(20):Python函数(3):关于lambda
一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的.如下: """命名的foo函数&q ...
- Python入门笔记(18):Python函数(1):基础部分
一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...
- python学习笔记(11):文件的访问与函数式编程
一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...
- python学习笔记(7)文件的访问与函数式编程
一.文件读写的3中方法 1.直接读入 fiel1=open('test.txt') file2=open('output.txt') while True: line=file1.readLine() ...
- Python入门笔记(19):Python函数(2):函数/方法装饰器
一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数,如下: @decorator(dec_opt_ar ...
- Python入门笔记(14):Python的字符编码
一.字符编码中ASCII.Unicode和UTF-8的区别 点击阅读:http://www.cnblogs.com/kingstarspe/p/ASCII.html 再推荐一篇相关博文:http:// ...
- Python学习笔记之常用函数及说明
Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
随机推荐
- 解决 The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path
到 http://tomcat.heanet.ie/native/ 下载最新的tcnative-1.dll放到相应目录即可,我目前下载的是 http://tomcat.heanet.ie/native ...
- fastreport totalpage 只有设置doublepassreport为true 才正确否则为0
fastreport totalpage 只有设置doublepassreport为true 才正确否则为0
- Win8.1 远程桌面 凭据无法工作
最近遇到一个杯具的事情 电脑重装完系统后,发现 win7/server08/server12 无法远程到我的电脑了- 每次连接都显示如下: 灵异的是从 xp 和 server03 能远程进来- ...
- Ubuntu 14.04 安装nVidia驱动后不能进入图形界面的恢复过程
想要解决Ubuntu14.04的风扇不停的转的问题.由于ubuntu本身不支持双显卡切换,导致集显独显都处于开启状态,发热量和耗电量居高不下. 1. 安装驱动过程 参考[1]中的步骤,做了如下的操作. ...
- android自定义TabView实现圆角列表
看到很多应用的设置界面都有圆角效果的列表,类似下面的 下面说说我的实现原理:继承LinearLayout,然后设置一个自定义的TabAdapter,类似于listview,添加一个setAdapter ...
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
原文 http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Une ...
- MyBatis+MySQL 返回插入的主键ID
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="i ...
- 使用 Portable Class Library(可移植类库)开发 Universal Windows App
今天在这里跟大家聊聊关于 Windows Universal 应用夸平台的问题,首先Universal Windows App的定义相信大家已经有所了解了(如果你是一个刚刚接触 Universal A ...
- 你还在问android横竖屏切换的生命周期?
本文原创,转载请注明来自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题. ...
- Windows 7远程桌面连接Ubuntu 16.04
转自:http://jingyan.baidu.com/article/8ebacdf0cdc64949f75cd555.html 从Windows 7远程到Windows系统比较简单,只要对方电脑开 ...