【发布时间】:2020-03-29 14:31:32
【问题描述】:
我不确定为什么下面的代码有效。根据文档,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)
返回:
[2, 1, '1']
[4, 4, '2']
[6, 9, '3']
[8, 16, '4']
[10, 25, '5']
*编辑
Martijn 回答了这个问题。这段代码做同样的事情,但将它从 lambda 函数中分离出来,显示 add, square, str 是如何被迭代的函数。
def add(x):
return x + x
def square(x):
return x * x
def act_on_iter(iter_obj, i):
return iter_obj(i)
nums = [1, 2, 3, 4, 5]
for i in nums:
vals = list(map(act_on_iter, (add, square, str), [i] * 3))
print(vals)
返回相同的
[2, 1, '1']
[4, 4, '2']
[6, 9, '3']
[8, 16, '4']
[10, 25, '5']
【问题讨论】:
标签: python python-3.x functional-programming map-function