我有以下代码:
g = lambda a, b, c: sum(a, b, c)
print g([4,6,7])
如何让 lambda 函数将列表扩展为 3 个值?
展开列表 t0 3 值可以通过以下方式完成:
g(*[4,6,7])
但sum
不会以你的方式工作。或者你可以这样写:
>>> g = lambda *arg: sum(arg)
>>> print g(4, 5, 6)
15
>>>
或者只是让你的 lambda 接受一个列表:
g = lambda alist: sum(alist)
print g([4,6,7])
g = lambda L: sum(L)
print g([4,6,7])
适用于任意大小的列表。
如果你想使用g = lambda a, b, c: someFunc(a, b, c)
,然后调用print g(4,6,7)
你为什么不能改变lambda
拿一个清单。因为sum()
不接受三个参数:
>>> g = lambda a_list: sum(a_list)
>>> print g([4,6,7])
17
或非关键字参数:
>>> g = lambda *nkwargs: sum(nkwargs)
>>> print g(4,6,7)
17
您正在定义一个接受三个参数的函数,并为它提供一个参数,一个列表。如果你想
print g([4,6,7])
工作,你的定义应该是
g = lambda lst: sum(lst)
您正在寻找的代码是:
>>> g = lambda a, b, c: sum([a, b, c])
>>> print g(*[4,6,7])
17
你试图做的不会工作:
>>> g = lambda a, b, c: sum(a, b, c)
>>> print g(*[4,6,7])
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
print g(*[4,6,7])
File "<pyshell#82>", line 1, in <lambda>
g = lambda a, b, c: sum(a, b, c)
TypeError: sum expected at most 2 arguments, got 3
因为sum()
无法处理你给它的论点。
既然你的 lambda 函数只是一个sum()
函数,为什么不直接调用sum()
呢?
如果您的代码具有以下a, b, c
值:
>>> a, b, c = range(1,4)
>>> print a,b,c
1 2 3
你想做:
>>> g = lambda a, b, c: sum([a, b, c])
>>> print g(*[a,b,c])
6
为什么不只做以下事情?:
>>> sum([a,b,c])
6
>>> g=lambda *l: sum(l)
>>> print g(1,2,3)
6
如果您的 lambda 期望传入一个固定长度的列表/元组,但希望将该列表/元组中的值扩展为单独的参数变量,则以下将起作用。
g = lambda (a, b, c): a + b + c
g([4, 6, 7])
请注意参数列表周围的括号。
这个“特性”在 Python 2.x 中有效,但在 Python 3 中被删除