我需要帮助理解python中map的功能

时间:2018-04-25 19:00:05

标签: python dictionary

def multiply(x):
    return (x*x)
def add(x):
    return (x+x)

funcs = [multiply, add]
for i in range(5):
    value = list(map(lambda x: x(i), funcs))
    print(value)

所以我理解map用于将函数/ first arg应用于list / second arg中的每个项目。我不明白的是如何在这个功能列表中处理它。

输出:

[0, 0]

[1, 2]

[4, 4]

[9, 6]

[16, 8]

2 个答案:

答案 0 :(得分:1)

让我们尝试将其拉出循环,看看会发生什么。

您的lambda x: x(i)正在使用参数i调用每个函数,而map(粗略)将其转换为列表。

list(map(lambda x: x(0), funcs)) -> [0,0]

这与说:[multiply(0), add(0)]

相同

如果我们再试一次:

list(map(lambda x: x(0), funcs)) -> [1,2]

这与说:[multiply(1), add(1)]

相同

您正在应用的函数,即映射的第一个参数,是您的lambda。这恰好是一个返回其输入结果的高阶函数。

重写此程序的类似方法是:

def multiply_and_add(i):
    return [multiply(i), add(i)]

result = map(multiply_and_add, range(5))

for value in result
    print(value)

答案 1 :(得分:0)

此处的地图用于一系列功能。 因此,对于每个函数,它将在其上执行lambda

在lambda中,你有x: x(i) 此处x是当前函数(因此multiplyadd) 而i是你当前循环的迭代(所以0-4)。

例如,第一次进入循环i == 0。 map函数运行multiply 1st,因此返回0*0,然后运行add并返回0+0。因此,值的输出为[0,0]