当前位置: 首页 > news >正文

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

转自 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) #145

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

相关文章:

  • socket.io中文文档
  • Digester 的使用(tomcat中server.xml and web.xml 的加载)
  • 我的MYSQL学习心得(九) 索引
  • nginx(二)nginx的安装
  • 聚合查询
  • 《Spring Boot开发:从0到1》大纲结构
  • mapdb 如何存数据
  • Unity 框架篇
  • IntelliJ IDEA 14.1.4导入项目启动报错:Error during artifact deployment.[组件部署期间出错]...
  • linux tree命令以树形结构显示文件目录结构
  • lzma解压
  • js定义对象的多个属性值
  • Vue学习 2017-4-9
  • iOS:创建撒花动画
  • Eclipse中10个最有用的快捷键组合
  • 2019年如何成为全栈工程师?
  • Bootstrap JS插件Alert源码分析
  • HTTP请求重发
  • js数组之filter
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue.js源码(2):初探List Rendering
  • webpack4 一点通
  • windows下使用nginx调试简介
  • 代理模式
  • 给github项目添加CI badge
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 讲清楚之javascript作用域
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 三栏布局总结
  • 微信开源mars源码分析1—上层samples分析
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 协程
  • 赢得Docker挑战最佳实践
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 阿里云ACE认证之理解CDN技术
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #HarmonyOS:Web组件的使用
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(智能家居界面-界面切换)
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)Nginx简介和安装教程
  • (Oracle)SQL优化技巧(一):分页查询
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (备忘)Java Map 遍历
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (力扣题库)跳跃游戏II(c++)
  • (南京观海微电子)——COF介绍
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)ObjectiveC 深浅拷贝学习
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .htaccess配置常用技巧
  • .Mobi域名介绍
  • .NET Core 2.1路线图
  • .Net Remoting(分离服务程序实现) - Part.3