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

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. canvas应用-思维导图

    canvas应用例子-思维导图 效果图如下: 函数说明: // 求圆上一点坐标,返回坐标点 function circlePoint(x, y, r, a) { var tmpx = x + r * ...

  2. 写给已有编程经验的 Python 初学者的总结【转】

    当我开始学习Python的时候,有些事我希望我一早就知道.我花费了很多时间才学会这些东西.我想要把这些重点都编纂到一篇文章当中.这篇文章的目标读者,是刚刚开始学习Python语言的有经验的程序员,想要 ...

  3. 解决mac os x下 tomcat启动报 java.net.BindException: Permission denied <null>:80 错误

    我在mac os x上启动tomcat的时候,报 java.net.BindException: Permission denied <null>:80,java.net.BindExce ...

  4. C语言函数可变长度参数剖析

    C语言中的很多函数的入参被定义为可变参数,最典型的 int printf (const char * fmt, ...) 要对其中的可变参数进行处理,就要用到va_list类型和 VA_START, ...

  5. Flink 剖析

    1.概述 在如今数据爆炸的时代,企业的数据量与日俱增,大数据产品层出不穷.今天给大家分享一款产品—— Apache Flink,目前,已是 Apache 顶级项目之一.那么,接下来,笔者为大家介绍Fl ...

  6. 不同iOS版本做代码适配__IPHONE_OS_VERSION_MAX_ALLOWED 和 __IPHONE_8_0等专业术语

    目前开发只想最低版本支持iOS8了,iOS8以前的就不管了,然后现在iOS9和iOS10出来以后,有些新的API,也有些弃用的API,为了兼容,有时候代码里面需要编写判断不同iOS版本,或者只允许指定 ...

  7. 我也要学iOS逆向工程--全局变量

    大家好!很久不见了.我之前去音乐学院进修爵士吉他去了.现在回来了.之前我一直在学windows开发和逆向.后来到了音乐学院,老师推荐了1个录音软件叫logic prox.可惜啊!当时我只有个索尼的笔记 ...

  8. 管理批量邮箱 FOXMAIL 和网易闪电邮(PC端)有什么区别? 对比

    喜欢用FOXMAIL有订阅功能&lt;img src="https://pic1.zhimg.com/fa72df2440f84043a5275b90df30b2f4_b.jpg&q ...

  9. STAF自动化测试框架

    STAF自动化测试框架介绍 http://baike.baidu.com/link?url=9oPZN3JntRakidI7xizqCbyGRISMvCKGfXHBB_WH7OAkKjAKZjq88q ...

  10. LocalBroadcastManager 使用小解

    最近在开发平板项目,完全是fragmentactivity+fragment的结构.看起来似乎简单,但是和以前不同的是,业务逻辑非常复杂,多处的非常规跳转,fragment之间的数据交换,一处更新多处 ...