Python中map函数用来根据提供的函数(通过参数提供)对指定序列做映射。本质上来讲,map函数在Python中是一个迭代器生成函数。本文详解map函数的使用方法。
map函数的语法
map(function, iterable)
参数解释如下:
function:一个函数或方法iterable:一个或多个序列(可迭代对象)函数的作用是:对序列iterable中每一个元素调用function函数,返回一个map对象实例。这个map对象本质上来讲是一个迭代器。
分析源代码如下:
这个类的内部实现了__iter__()、__next__()方法。下面详解其用法:
map函数使用匿名函数作为参数
传入map函数中的参数function可以是一个匿名函数。
print([i for i in map(lambda x: x * 2, [1, 2, 3, 4, 5])])运行结果如下
[2, 4, 6, 8]一般情况下,function最好有名字哦!
map函数的参数为一个简单的函数(该函数只有一个参数)
此时,map函数需要提供一个序列和一个函数。举例如下:
定义一个序列和一个函数
lst = ['a', 2, 'b', 4, 'c', 6, 'd', 8, 'e', 10]def sq(x):# 数值加倍,字符串重复 return x * 2使用map函数,将函数sq作用于序列lst中每一个元素,生成一个map对象。
m = map(sq, lst)打印结果
print(f'map函数返回对象类型:{type(m)}')print(print([i for i in m]))程序运行效果如下:
map函数返回对象类型:<class 'map'>['aa', 4, 'bb', 8, 'cc', 12, 'dd', 16, 'ee', 20]运行效果如图所示:
传入一个多参数的函数效果如何呢?
map函数的参数为一个复杂函数(该函数有2个或以上的参数)
此时,我们根据参数function中参数的位置,依次在map函数中提供相应的序列,序列的个数依function的参数个数而定。
我们定义两个序列:
lst1 = ['a', 'b', 'c', 'd', 'e']lst2 = [1, 2, 3, 4, 5]定义一个两个参数的函数
def sq(x, y):# 数值加倍,字符串重复 return x * y使用map函数
m = map(sq, lst1, lst2)print([i for i in m])运行效果如下:
['a', 'bb', 'ccc', 'dddd', 'eeeee']这个很好理解,函数需要几个参数,这几个参数就需要相应的序列提供。
但是,当提供的这些序列的长度不相等(使用len函数)时,map如何处理呢?
根据示例,当传入map函数中序列长度不等时,程序并不会报错。此时,map函数依据个数最小的序列确定返回的map对象实例的长度。
map函数中,function参数为多个时,参照上述2个参数的机制运行。
好了,map函数的用法就是这样了,小伙伴们掌握了吗?