当我使用lambda作为函数时,结果是列表连接。 但是当我将lambda与map一起使用时,结果是两个列表的总和。
res = [[1]]
g = lambda x, y: x + y
print(g(res[-1] + [0], [0] + res[-1]))
print(list(map(lambda x, y: x + y, res[-1] + [0], [0] + res[-1])))
[1、0、0、1] [1,1]
答案 0 :(得分:1)
这行很简单:
print(g(res[-1] + [0], [0] + res[-1]))
它仅使用参数[1, 0]
和[0, 1]
调用一次函数。这两个列表串联产生[1,0,0,1]
已更新并更正:
我的第一个答案是描述具有一个可迭代项的情况,但这是具有两个可迭代项的映射。
带有map的行为每组参数调用一次函数(lambda或常规,无关紧要)。这些参数的形成方式在文档中有详细说明:
返回将函数应用于所有可迭代项的迭代器, 产生结果。如果传递了其他可迭代的参数, 函数必须接受那么多参数,并应用于项目 来自所有可迭代对象的并行操作。有了多个可迭代项,迭代器 当最短的迭代次数用尽时停止。
我已重新格式化该行:
print(list(map(
lambda x, y: x + y, # call this function repeatedly
res[-1] + [0], # X's are takes from this list,
[0] + res[-1] # Y's are taken from this list,
)))
调用将与列表中的值一样多(准确地说,是最短的一次)。第一次调用的参数为1,0;第二个调用的参数为0、1。每个参数集都有两个值,因为传递了两个列表(当然,列表是可迭代的),因此它与需要两个参数的函数(x
和{{1} }。如果存在三个或更多的可迭代项,则会发生y
。
第一个电话加1 + 0,第二个电话加0 + 1。结果列表为TypeError
。
另一个示例(100 + 1、200 + 2、300 + 3)-> [101,202,303]:
[1,1]
您可以将调试输出添加到print(list(map(
lambda x, y: x + y, # call this function repeatedly
[100,200,300], # X's are takes from this list,
[1,2,3] # Y's are taken from this list,
)))
的定义中,以查看正在计算的内容。
g
该函数是否定义为lambda都没有区别。您可以这样编写def g(x, y):
print(f"debug: {x} + {y} -> {x+y}")
return x+y
:
map
并使用不同的数据测试程序。