我不确定为什么下面的代码有效。根据文档,map 仅采用一个函数作为第一个参数,并将其应用于一个或多个可迭代对象,具体取决于函数采用的参数数量。
map(function, iterable..)
但是,您可以传递多个函数来代替可迭代对象,并且以某种方式将它们视为可迭代对象。不知何故,这一行将函数 add、square 和 str 视为可迭代对象。
函数如何被视为有效的可迭代对象?
def add(x):
return x + x
def square(x):
return x * x
nums = [1, 2, 3, 4, 5]
for i in nums:
vals = list(map(lambda x: x(i), (add, square, str)))
print(vals)
Run Code Online (Sandbox Code Playgroud)
返回:
[2, 1, '1']
[4, 4, '2']
[6, 9, '3']
[8, 16, '4']
[10, 25, '5']
Run Code Online (Sandbox Code Playgroud)
*编辑马丁回答了问题。此代码执行相同的操作,但将其从 lambda 函数中分离出来,显示add, square, str函数是如何迭代的。
[2, 1, '1']
[4, 4, '2']
[6, 9, '3']
[8, 16, '4']
[10, 25, '5'] …Run Code Online (Sandbox Code Playgroud)