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]
答案 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
是当前函数(因此multiply
或add
)
而i
是你当前循环的迭代(所以0-4
)。
例如,第一次进入循环i == 0
。
map函数运行multiply
1st,因此返回0*0
,然后运行add
并返回0+0
。因此,值的输出为[0,0]