给定此代码:
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)
问题当然是,为什么?
可以删除lambda参数周围的括号:
或者将参数作为一个元组传递给原始lambda:
您创建了一个lambda函数,它接受一个参数:元组(x,y,z)。 如果使用元组作为函数的唯一参数调用函数,则它将工作:
或者,可以重新编写lambda函数,使其不带一个元组参数,而是带三个参数:
还要注意,简单地定义命名函数(即
def sumThree(x, y, z):
)是一种良好的编码实践。使用lambda函数并将其分配给变量(sumtree)会破坏lambda相对于常规函数的唯一优势:您不需要将它们推入变量中。相关问题 更多 >
编程相关推荐