У меня есть следующий код:Python параметры лямбда
g = lambda a, b, c: sum(a, b, c)
print g([4,6,7])
Как получить функцию лямбды расширить список в 3-х значения?
У меня есть следующий код:Python параметры лямбда
g = lambda a, b, c: sum(a, b, c)
print g([4,6,7])
Как получить функцию лямбды расширить список в 3-х значения?
Расширьте список 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])
g = lambda L: sum(L)
print g([4,6,7])
будет работать для любого произвольно выбранного размера.
Если вы хотите использовать g = lambda a, b, c: someFunc(a, b, c)
, а затем вызвать print g(4,6,7)
Вы ответ неверен, то 'sum' не может принять там аргументы. – zhangyangyu
@zhangyangyu: справедливая точка. Я отредактировал, чтобы уточнить свой смысл. – inspectorG4dget
Почему вы не можете изменить 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()
не может обрабатывать аргументы, которые вы ему дали.
С вашей лямбда-функции просто 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
Это пример, я пытаюсь сделать что-то еще, но параметры лямбда - это то, о чем я хотел знать. – smac89
>>> g=lambda *l: sum(l)
>>> print g(1,2,3)
6
Если лямбда ожидает, чтобы иметь список/кортеж фиксированной длины прошел в, но хочет расширить значения в этом списке/кортеж в отдельных переменных параметров, следующие будут работать.
g = lambda (a, b, c): a + b + c
g([4, 6, 7])
Обратите внимание на круглые скобки вокруг списка параметров.
Это «особенность» работает в Python 2.x, но была удалена в Python 3
Спасибо @zhangyangyu – smac89