Python内置函数map()详解

一. map函数定义

map(function, iterable, ...)

参数function是一个函数名,可以是python内置的,也可以是自定义的。

参数iterable是一个可以迭代的对象,例如列表,元组,字符串这样的。iterable可以多个,但需要

function有同样数量的参数。

map函数就是将function应用于可迭代对象iterable的每一个元素,调用之后,每一个元素返回一个新的结果,所有的结果再合并起来返回一个新的可迭代对象。

详见《Python map()函数定义》

 

二. map函数用法

1. 内置函数实例

# 为了方便观察,将返回值转为list。实际上返回一个可迭代对象
print
(list(map(str, [1, 2, 3]))) # ['1', '2', '3']
print(list(map(str, "21yi.com"))) # ['2', '1', 'y', 'i', '.', 'c', 'o', 'm']
print(list(map(str, ("a", "b", "c", "d")))) # ['a', 'b', 'c', 'd']

2. 自定义函数实例

# 单参数函数
def hello(x):
return str(x) + ","


rs = map(hello, "21yi.com")
print(list(rs))


# 多参数函数
def demo(x, y):
return x + y + 1


# 多个iterable,第一个可迭代对象最短,耗尽了就结束循环
rs = map(demo, [1, 2, 3], [2.1, 3.5, 4.6, 5.5])
for i in rs:
print(i)

# 单个可迭代对象,抛出异常,参数数量不对应
rs = map(demo, [1, 2, 3]) # TypeError: demo() missing 2 required positional arguments: 'x' and 'j'
print(rs)

3. 多个可迭代对象实例

  • 对于多个可迭代对象,可迭代对象的数量需要与函数实参数量一致。
  • 如果多个可迭代对象元素数量不同,则最短的耗尽就结束循环

例如:

# 多参数函数
def demo(x, y):
return x, y, 1


# 单个可迭代对象,对象数量不同
rs = map(demo, [1, 2, 3], [1]) # 只输出一次
for i in rs:
print(i)
# 结果
(1, 1, 1)

4. lambda匿名函数实例

l = [1, 2, 3]
rs = map(lambda x, y, z: x * y * z, l, l, l)
for i in rs:
print(i)

# 1 8 27