Python学习笔记:函数式编程工具
2016-12-06 20:33
477 查看
本篇参考官方文档: The PythonTutorial:5.Data Structures
函数式编程可以大大简化代码,本篇学习一下三个对list操作非常有用的函数:
如果序列中只有一个元素,就返回它。如果序列是空的,就抛出异常。
这三个函数中,只有
函数式编程可以大大简化代码,本篇学习一下三个对list操作非常有用的函数:
filter(),map(),reduce()
filter
filter(function, sequence)返回一个由序列(sequence)中使得
function(item)为真的元素(item)组成的组成的序列。如果这个序列是
str,unicode或
tuple,结果还是一样的类型。否则,结果都会变成列表。例如,计算一个能被3或5整除的sequence:
>>> def f(x): return x % 3 == 0 or x % 5 == 0 ... >>> filter(f, range(2, 25)) [3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
map
map(function, sequence)对每个序列中的元素调用
function(item),然后返回一个返回值列表。比如,计算一个立方:
>>> def cube(x): return x*x*x ... >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
map可接收不止一个序列。那么这个函数的参数个数就必须跟序列个数相同,而且函数作用于几个序列中的相应元素(或者如果一个序列短于另一个,就返回
None)。例如:
>>> def cube(x): return x*x*x ... >>> map(cube, range(1, 11)) [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
reduce
reduce(function, sequence)返回单个值,这个值是由一个二元函数,先作用于序列的前两个元素,得到的结果再作用于第三个元素,以此类推得到。例如,计算1到10的和:
>>> def add(x,y): return x+y ... >>> reduce(add, range(1, 11)) 55
如果序列中只有一个元素,就返回它。如果序列是空的,就抛出异常。
reduce可接收第三个参数来表示开始值(starting value)。在这种情况下如果序列是空的就返回开始值。函数先作用于开始值和序列的第一个元素,以此类推。例如:
>>> def sum(seq): ... def add(x,y): return x+y ... return reduce(add, seq, 0) ... >>> sum(range(1, 11)) 55 >>> sum([]) 0
这三个函数中,只有
reduce比较难懂。在纯函数式编程语言Haskell中也有类似的函数,叫
foldr,顾名思义,就是“向右折叠”,是不是很形象呢?
reduce函数可以把一些简单的递归用非常简洁的代码解决。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法