Python 将lambda用作函数和将lambda与map一起使用有什么区别吗?

Python 将lambda用作函数和将lambda与map一起使用有什么区别吗?,python,lambda,Python,Lambda,当我使用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] 这句话很简单: print(g(res[-1] + [0], [0] +

当我使用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]


这句话很简单:

print(g(res[-1] + [0], [0] + res[-1]))
它只使用参数
[1,0]
[0,1]
调用函数一次。这两个列表串联在一起产生
[1,0,0,1]


更新和更正:

我的第一个答案是用一个iterable描述这个案例,但这是一个有两个iterable的地图

with行为每一组参数调用函数一次(lambda或regular,无所谓)。文档中描述了这些参数的具体形式:

返回一个迭代器,该迭代器将函数应用于iterable的每个项, 产生结果。如果传递了其他iterable参数, 函数必须接受那么多参数,并应用于项 从所有的可比性并行。对于多个iterable,迭代器 当最短iterable耗尽时停止

我已将该行重新格式化:

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
y
)。如果有三个或三个以上的iterables,则会发生
TypeError

第一次调用添加1+0,第二次调用添加0+1。结果列表是
[1,1]

另一个例子(100+1200+2300+3)->[101202303]:

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
的定义中,以查看正在计算的内容

def g(x, y): 
    print(f"debug: {x} + {y} -> {x+y}")
    return x+y 
函数是否定义为lambda没有区别。您可以这样编写
映射

print(list(map(g, res[-1] + [0], [0] + res[-1])))

然后用不同的数据测试程序。

您回答了自己的问题。这是将lambda与map一起使用的技巧吗?但是当res=[[1]、[1,1]]打印时([list(map(map(lambda x,y:x+y,res[-1]+[0]、[0]+res[-1]))>[1,2,1]在那里,res[-1]+[0]>[1,0]+res 1]>[0,1];这两个列表中的每一个都包含3个值。你能解释一下原因吗?@DavidZhang I发布了一个更新的答案。我为第一个答案中的错误感到抱歉。