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学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
随机推荐
- javascript 搜索二叉树
function Tree() { this.root = null; } Tree.prototype = { constructor: Tree, addItem: function(value) ...
- 使用vim 查看二进制文件
Vim 可以用来查看和编辑二进制文件 vim -b egenea-base.ko 加上-b参数,以二进制打开 然后输入命令 :%!xxd -g 1 切换到十六进制模式显示
- JSON处理
var ajax = function () { mui.ajax(projectPath+'/goods/goodsprice.do', { dataType: 'json', type: 'pos ...
- Oracle存储过程,以逗号分隔字符串传参的处理
Oracle存储过程,经常会遇见传入的参数是逗号分隔. 处理需要3步: 第一步,创建Type类型 第二部,创建函数 第三部,创建存储过程 代码如下: 第一步: create or replace ty ...
- 导出 C/C++ API 给 Lua 使用[转]
导出 C/C++ API 给 Lua 使用 cocos2d-x 和 quick-cocos2d-x 的底层代码都是使用 C++ 语言开发的.为了使用 Lua 脚本语言进行开发,我们利用 tolua ...
- iOS8中使用CoreLocation定位[转]
本文转自:http://blog.devzeng.com/blog/ios8-corelocation-framework.html iOS8以前使用CoreLocation定位 1.首先定义一个全局 ...
- Qt实现FlatUI样式(开源)
对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反而没有扁平 ...
- Android 自定义View实现多行RadioGroup (MultiLineRadioGroup)
一.项目概况 我们都知道RadioGroup可以实现选择框,但它有一个局限性,由于它是继承自LinearLayout的,所以只能有一个方向,横向或者纵向:但有时候仅一行的RadioGroup并不能满足 ...
- adb permission denied
1.没有得到root权限,可以用刷机精灵一键root. 2.root不彻底,手机安装超级adbd,即可.
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...