Python之高阶函数
- 做过
Swift
开发的童鞋都知道, 在Swift
中有许多的高阶函数(Map
,Filter
,Reduce
,Zip
等), 这些在开发中让我们节省大量代码 Python
中同样有许多的内置函数, 但是这里也只介绍几个常用的高阶函数
map
映射
根据提供的函数对指定序列做映射, 并返回映射后的序列
1 | map(function, iterable, ...) |
参数/返回值
function
– 函数, 序列中的每个元素需要执行的操作, 可以是匿名函数iterable
– 一个或多个序列Python 2.x
中返回列表,Python 3.x
中返回map
类
使用示例
1 | # 调用外部函数 |
reduce
- 函数会对参数序列中元素进行累积
- 函数将集合中的所有数据进行下列操作:用传给
educe
中的函数function
先对集合中的第1、2个元素进行操作,得到的结果再与第三个数据用function
函数运算,最后得到一个结果 - 在
Python3
中,reduce
函数已经被从全局名字空间里移除了,它现在被放置在fucntools
模块里,如果想要使用它,则需要通过引入functools
模块来调用reduce
函数
1 | reduce(function, iterable[, initializer]) |
参数/返回值
function
– 函数, 序列中的每个元素需要执行的操作, 可以是匿名函数iterable
– 需要执行操作的序列initializer
– 可选,初始参数- 最后返回函数的计算结果, 和初始参数类型相同
使用示例
1 | # 求元素的和 |
filter
过滤
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表
1 | filter(function, iterable) |
参数/返回值
function
– 过滤操作执行的函数iterable
– 需要过滤的序列- 序列的每个元素作为参数传递给函数进行判,然后返回
True
或False
,最后将返回True
的元素放到新列表中 Python 2.x
中返回的是过滤后的列表, 而Python 3.x
中返回到是一个filter
类
使用示例
1 | def isOdd(x): |
sorted
排序
- 在列表中有一个内置的排序函数
sort()
, 对列表的对象进行排序, 没有返回值 sorted()
函数对所有可迭代的对象进行排序操作sort
与sorted
区别:sort
是应用在list
上的方法,sorted
可以对所有可迭代的对象进行排序操作。list
的sort
方法返回的是对已经存在的列表进行操作,而内建函数sorted
方法返回的是一个新的list
,而不是在原来的基础上进行的操作
1 | list.sort(cmp=None, key=None, reverse=False) |
参数/返回值
iterable
– 可迭代对象cmp
– 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。key
– 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse
– 排序规则,reverse = True
降序,reverse = False
升序(默认)sort
没有返回值,sorted
返回重新排序的列表
使用示例
使用sort()
排序
1 | # 用sort |
使用sorted()
函数排序时
1 | list4 = sorted(list3) |
enumerate
- 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在
for
循环当中 Python 2.3
以上版本可用,2.6
添加start
参数
1 | enumerate(sequence, [start=0]) |
参数/返回值
sequence
– 一个序列、迭代器或其他支持迭代对象start
– 下标起始位置- 函数返回
enumerate
(枚举) 对象
使用示例
1 | seasons = ['Spring', 'Summer', 'Fall', 'Winter'] |
zip
- 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存
- 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
- 函数有一个参数, 接受一个或多个序列
- 函数利用
*
号操作符,可以将元组解压为列表 zip
方法在Python 2.x
中返回一个列表, 在Python 3.x
中返回一个对象
1 | zip([iterable, ...]) |
使用示例
1 | a = [1, 2, 3] |
reverse
reverse()
函数用于将列表中的元素反向排列- 该函数没有参数没有返回值
- 使用示例如下
1 | list31 = [1, 2, 3, 4] |