使用lambda作为函数和将lambda与MAP一起使用之间有任何区别



当我使用lambda作为函数时,结果是列表连接。但是当我将lambda与地图一起使用时,结果是两个列表的总和。

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]


更新和更正:

我的第一个答案是用一个迭代来描述案例,但这是一张带有两个迭代的地图。

与映射的行调用函数(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。每组参数都有两个值,因为传递了两个列表(当然是迭代(,因此它与期望两个参数的函数匹配(xy(。如果有三个或更多迭代,将发生TypeError

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

另一个示例(100 1,200 2,300 3( -> [101,202,303]:

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没有区别。您可以这样写map

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

并用不同的数据测试程序。

最新更新