格式：map( func, seq1[, seq2...] )

"""
Explanation: Python函数式编程中的map()函数是将func作用于seq中的每一个元素，并用一个列表给出返回值。
End of explanation
"""


print(list(range(6)))
print(map(lambda x: x % 3, range(6))) #使用map
print(list(map(lambda x: x % 3, range(6)))) #使用map

print(x % 3 for x in range(6)) #使用列表解析

print([x % 3 for x in range(6)]) #使用列表解析

"""
Explanation: 当seq只有一个时，将func函数作用于这个seq的每个元素上，得到一个新的seq。下图说明了只有一个seq的时候map()函数是如何工作的（本文图片来源：《Core Python Programming (2nd edition)》）。
<img src="http://www.pythoner.com/wp-content/uploads/2013/01/map-1.png"/>
可以看出，seq中的每个元素都经过了func函数的作用，得到了func(seq[n])组成的列表。
下面举一个例子进行说明。假设我们想要得到一个列表中数字%3的余数，那么可以写成下面的代码。
End of explanation
"""


print(list(map(lambda x, y: x * y, [1, 2, 3], [4, 5, 6])))

"""
Explanation: 什么时候是列表解析无法代替map的呢？
当seq多于一个时，map可以并行地对每个seq执行如下图所示的过程：
<img src="http://www.pythoner.com/wp-content/uploads/2013/01/map-2.png"/>
下面的例子是求两个列表对应元素的积，可以想象，这是一种可能会经常出现的状况，而如果不是用map的话，就要使用一个for循环，依次对每个位置执行该函数。
End of explanation
"""


print(list(map(lambda x, y: (x * y, x + y), [1, 2, 3], [4, 5, 6])))

"""
Explanation: 上面是返回值是一个值的情况，实际上也可以是一个元组。下面的代码不止实现了乘法，也实现了加法，并把积与和放在一个元组中。
End of explanation
"""


import platform
print('当前python的版本号为：{version}'.format(version=platform.python_version()))
print(list(map(lambda x, y: x * y, [1, 2, 3], [4, 5, 6, 7, 8])))

"""
Explanation: 需要注意的是，不同长度的多个seq执行map函数时，会按照较短的seq为准计算。(python3.6测试通过)
End of explanation
"""


