2013-07-18 2 views

ответ

4

Расширьте список t0 3 значения может быть сделано следующим образом:

g(*[4,6,7]) 

Но sum не будет работать на вашем пути. Или вы можете написать так:

>>> g = lambda *arg: sum(arg) 
>>> print g(4, 5, 6) 
15 
>>> 

Или просто сделать лямбда принимает список:

g = lambda alist: sum(alist) 
print g([4,6,7]) 
+0

Спасибо @zhangyangyu – smac89

3
g = lambda L: sum(L) 
print g([4,6,7]) 

будет работать для любого произвольно выбранного размера.

Если вы хотите использовать g = lambda a, b, c: someFunc(a, b, c), а затем вызвать print g(4,6,7)

+0

Вы ответ неверен, то 'sum' не может принять там аргументы. – zhangyangyu

+0

@zhangyangyu: справедливая точка. Я отредактировал, чтобы уточнить свой смысл. – inspectorG4dget

3

Почему вы не можете изменить 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 
1

Вы определяете функцию, которая принимает три параметра, и поставляя его с одним параметром , список. Если вы хотите

print g([4,6,7]) 

работать, ваше определение должно быть

g = lambda lst: sum(lst) 
1

Код, который вы ищете:

>>> 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() не может обрабатывать аргументы, которые вы ему дали.


С вашей лямбда-функции просто 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 
+0

Это пример, я пытаюсь сделать что-то еще, но параметры лямбда - это то, о чем я хотел знать. – smac89

1

Если лямбда ожидает, чтобы иметь список/кортеж фиксированной длины прошел в, но хочет расширить значения в этом списке/кортеж в отдельных переменных параметров, следующие будут работать.

g = lambda (a, b, c): a + b + c 
g([4, 6, 7]) 

Обратите внимание на круглые скобки вокруг списка параметров.

Это «особенность» работает в Python 2.x, но была удалена в Python 3

Смежные вопросы