您的位置:首页 > 编程语言 > Python开发

Python:函数式编程

2018-03-21 15:36 309 查看

filter 函数

filter(function, iterable)


function – 判断函数。

iterable – 可迭代对象。

相当于过滤器。调用一个布尔函数
bool_func
来迭代遍历每个seq中的元素;返回一个使
bool_seq
返回值为true的元素的序列。

python2中返回的是过滤后的列表,而python3中返回到是一个filter类,可以看成是一个迭代器

>>> a = [1,2,3,4,5,6,7]
>>> b = filter(lambda x: x>5, a)

# python 2.x
>>> print b
[6,7]

# python 3.x
>>> print(b)
<filter object at 0x02EE8DB0>


map函数

map(function, iterable, ...)


function – 映射函数

iterable – 一个或多个序列

会根据提供的函数对指定序列做映射。如果函数有多个参数,但每个参数的序列元素数量不一样,会根据最少元素的序列进行。

python 2.x 返回列表。

python 3.x 返回迭代器。

>>> a = map(lambda x: x*2, [1,2,3])
>>> list(a)
[2,4,6]

# 提供了两个列表,对相同位置的列表数据进行相加。
# 如果列表元素数量不一样,会根据最少元素的序列进行。
>>> b = map(lambda x,y: x+y, [1,2,3], [2,3,4,5])
>>> list(b)
[3, 5, 7]


reduce函数

reduce(function, iterable[, initializer])


function – 函数

iterable – 可迭代对象

initializer – 可选,初始参数

对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。如果提供了 initial 参数,计算时它将被放在序列的所有项前面,如果序列是空的,它也就是计算的默认结果值了。

python 2.x 可以直接使用。

python 3.x 需要先引用
from functools import reduce


>>> from functools import reduce
>>> reduce(lambda x,y:x*y,range(1,4))
6


zip函数

zip([iterable, ...])


iterabl – 一个或多个迭代器

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

利用 * 号操作符,可以将元组解压为列表。

python 2.x 返回列表。

python 3.x 返回迭代器。

# python 2.x
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]

>>> zipped = zip(a,b)  #打包为元组的列表
[(1, 4), (2, 5), (3, 6)]

>>> zip(a,c)  # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]

>>> zip(*zipped)  # 与 zip 相反,可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: