[英]Is there any difference between using lambda as a function and using lambda with map?
当我使用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]
调用一次函数。 这两个列表串联产生[1,0,0,1]
更新并纠正:
我的第一个答案是描述带有一个可迭代对象的情况,但这是一个带有两个可迭代对象的地图。
对于每组参数,带有map的行一次调用函数(lambda或常规,无关紧要)。 这些参数的形成方式在文档中有详细说明:
返回一个将函数应用于所有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
)的函数匹配。 如果存在三个或更多的可迭代项,则会发生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])))
并用不同的数据测试程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.