一、关于函数式编程的内建函数

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):关于函数式编程的内建函数的更多相关文章

  1. Python学习(20):Python函数(4):关于函数式编程的内建函数

    转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filte ...

  2. Python入门笔记(22):Python函数(5):变量作用域与闭包

    一.全局变量与局部变量 一个模块中,最高级别的变量有全局作用域. 全局变量一个特征就是:除非被删除,否则他们存活到脚本运行结束,且对于所有的函数都可访问. 当搜索一个标识符(也称变量.名字等),Pyt ...

  3. Python入门笔记(20):Python函数(3):关于lambda

    一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的.如下: """命名的foo函数&q ...

  4. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  5. python学习笔记(11):文件的访问与函数式编程

    一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...

  6. python学习笔记(7)文件的访问与函数式编程

    一.文件读写的3中方法 1.直接读入 fiel1=open('test.txt') file2=open('output.txt') while True: line=file1.readLine() ...

  7. Python入门笔记(19):Python函数(2):函数/方法装饰器

    一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数,如下: @decorator(dec_opt_ar ...

  8. Python入门笔记(14):Python的字符编码

    一.字符编码中ASCII.Unicode和UTF-8的区别 点击阅读:http://www.cnblogs.com/kingstarspe/p/ASCII.html 再推荐一篇相关博文:http:// ...

  9. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

随机推荐

  1. Oracle 数据同步系列--触发器

    现在随着项目集成的越来越深入,异构的数据多起来,数据同步的场景也用的多起来,我甚至在考虑是否忽悠用户上Oracle GoldenGate了,这样就可以不用考虑采用哪种同步方案了. 简单的介绍一下我们数 ...

  2. 【转】mac/linux终端光标的快捷键操作

    摘自网络:原标题是类似linux/unix命令行终端的光标及字符控制快捷键的东东. 常用的快捷键: Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处 ...

  3. 10大经典CSS3菜单应用欣赏

    很多时候,我们的网页菜单需要个性化,从而来适应各种行业的用户视觉操作体验.本文将带领大家一起来欣赏10个非常经典的CSS3菜单应用,菜单涉及到动画菜单.Tab菜单.面包屑菜单等. 1.CSS3飘带状3 ...

  4. synchronized关键字,Lock接口以及可重入锁ReentrantLock

    多线程环境下,必须考虑线程同步的问题,这是因为多个线程同时访问变量或者资源时会有线程争用,比如A线程读取了一个变量,B线程也读取了这个变量,然后他们同时对这个变量做了修改,写回到内存中,由于是同时做修 ...

  5. Jdbc如何从PostgreSql读取海量数据?PostgreSql源代码分析纪录

    前言: 最近做数据同步,需要从PostgreSql获取数据,发现一旦数据比较多,那么读取的速度非常慢,并且内存占用特别多&GC不掉. 代码样例: 为了方便讲解,下面写了事例代码,从b2c_or ...

  6. WinStore控件之Button、HyperlinkButton、RadioButton、CheckBox、progressBar、ScrollViewer、Slider

    1.Button protected override void OnNavigatedTo(NavigationEventArgs e) { /* * Button - 按钮控件,其全部功能是通过其 ...

  7. python 字符串查找

    python 字符串查找有4个方法,1 find,2 index方法,3 rfind方法,4 rindex方法. 1 find()方法: )##从下标1开始,查找在字符串里第一个出现的子串:返回结果3 ...

  8. Exploring Ionic Lists

    Infinite Lists 由于手机不适合使用多页面显示posts,Infinite Lists成为各种新闻.咨询类app的标配.为了在ionic框架中使用到Infinite Lists,我们首先学 ...

  9. ionic介绍

    ionic介绍 Ionic是一个前端的框架,帮助开发者使用HTML5, CSS3和JavaScript做出原生应用. The beautiful, open source front-end fram ...

  10. 修改mysql默认字符集的方法

    +--------------------------+---------------------------------+ | Variable_name | Value | +---------- ...