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学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
随机推荐
- Difference between SET, SETQ and SETF in LISP
SET can set the value of symbols; SETQ can set the value of variables; SETF is a macro that will ...
- spring 集成 Hibernate4.3.X org.hibernate.service.jta.platform.spi.JtaPlatform异常
使用Spring3.2.4集成Hibernate4.3.5时,出现以下异常 Causedby:java.lang.ClassNotFoundException:org.hibernate.servic ...
- 利用vba将excel中的图片链接直接转换为图片
Sub test() Dim rg As Range, shp As Shape Rem --------------------------------------------------- Rem ...
- Netty http client 编写总结
Apache http client 有两个问题,第一个是 apache http client 是阻塞式的读取 Http request, 异步读写网络数据性能更好些.第二个是当 client 到 ...
- saiku 升级&备份&恢复
最近使用saiku,重新编译升级之后维护困难,下面讲解一下简单的办法: 1.备份saiku-server下面的data文件夹 2.备份saiku-server下面的repository文件夹 3.升级 ...
- git delete repository
- CSS基础(五):定位
CSS定位机制 CSS 有三种基本的定位机制:相对定位.浮动和绝对定位. 相对定位 相对定位指的是设置为相对定位的元素框会偏移某个距离.元素仍然保持其未定位前的形状,它原本所占的空间仍保留. 如果将b ...
- Linux探秘之用户态与内核态
一. Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核).内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程 ...
- iOS开发-Xcode升级后插件失效解决办法
打开terminal,输入如下命令: | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add `defaults r ...
- 解决php中echo出来的汉子乱码
问的人太多了,就列出来展示给大家! 需要了解的概念: Content-Type:用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据 MIME:MIME类型就是设定某种扩展 ...