类型错误:<lambda>()只接受1个参数(给定3个)

2024-10-05 10:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

给定此代码:

sumThree = lambda (x, y, z): (x[0]+ y[0] + z[0], x[1] + y[1] + z[1])
print 'sumThree((1, 2), (3, 4), (5, 6)) = {0}'.format(sumThree((1, 2), (3, 4), (5, 6)))

我得到:

TypeError                                 Traceback (most recent call last)
<ipython-input-43-7f1b9571e230> in <module>()
     16 # second position summed. E.g. (1, 2), (3, 4), (5, 6) => (1 + 3 + 5, 2 + 4 + 6) => (9, 12)
     17 sumThree = lambda (x0, x1, x2): (x[0]+ y[0] + z[0], x[1] + y[1] + z[1])
---> 18 print 'sumThree((1, 2), (3, 4), (5, 6)) = {0}'.format(sumThree((1, 2), (3, 4), (5, 6)))

TypeError: <lambda>() takes exactly 1 argument (3 given)

问题当然是,为什么?


Tags: lambda代码informatmostinputipythoncall
2条回答

可以删除lambda参数周围的括号:

sumThree = lambda x, y, z: (x[0]+ y[0] + z[0], x[1] + y[1] + z[1])

或者将参数作为一个元组传递给原始lambda:

print 'sumThree((1, 2), (3, 4), (5, 6)) = {0}'.format(sumThree(((1, 2), (3, 4), (5, 6))))

您创建了一个lambda函数,它接受一个参数:元组(x,y,z)。 如果使用元组作为函数的唯一参数调用函数,则它将工作:

sumThree(((1, 2), (3, 4), (5, 6)))

或者,可以重新编写lambda函数,使其不带一个元组参数,而是带三个参数:

sumThree = lambda (x, y, z): (x[0]+ y[0] + z[0], x[1] + y[1] + z[1])

还要注意,简单地定义命名函数(即def sumThree(x, y, z):)是一种良好的编码实践。使用lambda函数并将其分配给变量(sumtree)会破坏lambda相对于常规函数的唯一优势:您不需要将它们推入变量中。

相关问题 更多 >

    热门问题