map函数

2019年9月8日 / 12次阅读 / Last Modified 2019年9月9日
内置函数

Python内置的map函数,可以实现对输入序列的每一个元素,执行否一个指定的函数。map函数返回一个迭代器。

我在网络上找到两张图片,能够非常直观的告诉你map函数所实现的功能。

map函数的功能示意图
map函数的功能示意图
>>> def formap(x):
...     return x*10
...
>>> for i in map(formap, range(10)):
...     print(i)
...
0
10
20
30
40
50
60
70
80
90

上面的代码示例比较简单,先定义个函数formap,此函数功能就是将入参值增大10倍,map函数使用这个formap函数,对range(10)返回的可迭代对象进行遍历,然后在for...in...循环中遍历map函数返回的迭代器,打印出结果。(关于迭代器和可迭代对象的详细说明

如果传递给map的执行函数(map内的回调)不是很复杂,可以使用lambda匿名函数,使写出来的代码更加简洁。这也是我们常常在阅读优秀代码是看到的写法:

>>> for i in map(lambda x:x*10, range(10)):
...     print(i)
...
0
10
20
30
40
50
60
70
80
90

刚才说到两张图片,下面是第二张关于map函数功能的说明图片:

map函数的多个可迭代对象参数的情况
map函数的多个可迭代对象参数的情况

Python的map函数可以输入多个可迭代对象,请看下面的代码示例:

>>> for i in map(lambda x,y:x+y, range(10), range(10,20)):
...     print(i)
...
10
12
14
16
18
20
22
24
26
28
>>> for i in map(lambda x:x[0]+x[1], zip(range(10), range(10,20))):
...     print(i)
...
10
12
14
16
18
20
22
24
26
28

到对map函数输入多个可迭代对象的时候,map函数会像Python的zip函数那样,从每隔可迭代对象中取分别取数据,然后执行回调函数。上面代码在第2次for循环的时候,就是用了zip函数,将多个可迭代对象合并。

跟zip函数一样,map函数在处理多个可迭代对象的时候,也是按照最短原则进行,即map返回的迭代器处理最短的可迭代对象后就停止。

>>> for i in map(lambda x,y:x+y, range(10), range(5)):
...     print(i)
...
0
2
4
6
8

这段代码中,range(5)是最短的,因此从map返回的迭代器中取数据,耗尽range(5)后,迭代器就停止。

以上就是对Python的内置map函数的介绍,所示例的代码都比较简单,而在实际应用中,map函数的这种功能,可以说是相当强大。

-- EOF --

本文链接:https://www.pynote.net/archives/1086

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top