转自http://www.cnblogs.com/BeginMan/p/3178103.html

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

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 print Myreduce(lambda x,y:x+y, [i for i in range(10)]) #45
print Myreduce(lambda x,y:x+y, [i for i in range(10)],100) #145 """reduce()"""
print reduce(lambda x,y:x+y,[i for i in range(10)]) #45
print reduce(lambda x,y:x+y,[i for i in range(10)],100) #

综上,尽量用最简便的方式去实现。

Python学习(20):Python函数(4):关于函数式编程的内建函数的更多相关文章

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

    一.关于函数式编程的内建函数 apply()逐渐被舍弃,这里不讨论 1.filter() #filter(func,seq) """纯Python描述filter函数&q ...

  2. Python学习-20.Python的Urllib模块

    除了 Http 模块可以模拟 Http 请求外,使用 Urllib 模块也是可以模拟 Http 请求的,只不过功能相对弱一点. import urllib.request opener = urlli ...

  3. python学习——高阶函数

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.使用递归函数的优点是逻辑简单清晰,缺点就是过深的调用会导致栈溢出.但是针对尾递归优化的语言可以通过尾递归防 ...

  4. Python学习day09 - Python进阶(3)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  5. Python学习day05 - Python基础(3) 格式化输出和基本运算符

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  6. python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r

    一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x p ...

  7. python学习道路(day4note)(函数,形参实参位置参数匿名参数,匿名函数,高阶函数,镶嵌函数)

    1.函数 2种编程方法 关键词面向对象:华山派 --->> 类----->class面向过程:少林派 -->> 过程--->def 函数式编程:逍遥派 --> ...

  8. 【Python学习之五】函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 Python不但能非常灵活地定义函数,而且本身内置 ...

  9. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

随机推荐

  1. 一个简单的perl程序

    和朋友聊天,说perl的神奇,最主要的是一行代码搞定所有. 想想用python3写的测试脚本,觉得还是有点多的,真的用几行代码写一个测试脚本,可以节约不少时间. 当然,网上黑perl的还是很多,不过自 ...

  2. (转)tcp和udp能否发送0字节的数据包

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转自:http://blog.csdn.net/wzx19840423/article/details/6643094  最近去一家牛逼的公司面试 ...

  3. C# 通过调用Win32 API函数清除浏览器缓存和cookie

    public enum ShowCommands : int { SW_HIDE = , SW_SHOWNOrmAL = , SW_NOrmAL = , SW_SHOWMINIMIZED = , SW ...

  4. 相对和绝对路径/cd命令/创建和删除目录mkdir/rmdir/rm命令

    2.6 相对和绝对路径 2.7 cd命令 2.8 创建和删除目录mkdir/rmdir 2.9 rm命令 绝对路径:从根开始的路径:文件所在的路径: 相对路径:相对于当前目录而言的路径:上一级或者下一 ...

  5. 阿里云Centos6.9安装图形化界面

    yum -y groupinstall "X Window System" "Chinese Support" "Desktop"

  6. Linux下MySQL开放root的远程访问权限

    mysql默认只能从本地连接,所以要使root可以远程访问登录,需做如下设置: 1.授权 请使用以下命令 mysql> Grant all privileges on *.* to 'root' ...

  7. Struts2/XWork 安全漏洞及解决办法

    exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞. 漏洞名称:Struts2/XWork < 2.2.0 Remote Command Execution V ...

  8. SharePoint 2013 处理videoplayerpage.aspx下的个人图片显示有误问题

    问题: Personal site's photo can't correct display in the videos page The url address of personal site' ...

  9. vue实现点击关注之后及时更新列表

    如图,我要实现点击关注之后列表及时更新成最新的列表. 思路很简单,主要是两点: 1.在点击关注之后去执行一个请求新的关注列表的action: 2.在vue组件中watch监听已关注列表和推荐关注列表 ...

  10. django 配置中STATICFILES_DIRS 和STATIC_ROOT不能同时出现

    系统环境: win7 django版本查看: 启动django项目的时候,一直找不到静态资源,很奇怪放在linux服务器上的时候好好的,拿下来随便修改了配置就说url找不到了. 用wingIDE没有任 ...