Я хотел бы написать функцию Python, которая добавляет все свои аргументы, используя оператор +
. Количество аргументов не указано:
def my_func(*args):
return arg1 + arg2 + arg3 + ...
Как это сделать?
С уважением
Я хотел бы написать функцию Python, которая добавляет все свои аргументы, используя оператор +
. Количество аргументов не указано:
def my_func(*args):
return arg1 + arg2 + arg3 + ...
Как это сделать?
С уважением
Просто используйте встроенную функцию sum.
>>> def my_func(*args):
... return sum(args)
...
>>> my_func(1,2,3,4)
10
>>>
Изменить:
Я не знаю, почему вы хотите избежать суммы, но начнем:
>>> def my_func(*args):
... return reduce((lambda x, y: x + y), args)
...
>>> my_func(1,2,3,4)
10
>>>
Вместо lambda
вы также можете использовать operator.add.
Изменить2:
Я просмотрел ваш другое questions, и кажется, что ваша проблема заключается в использовании sum
в качестве параметра key
для max
при использовании пользовательского класса. Я ответил на ваш вопрос и предоставил способ использования вашего класса с sum
в моем ответе.
sum
.
- person alwbtc; 17.07.2012
+
для случаев, отличных от чисел.
- person Henry Gomersall; 17.07.2012
__radd__
в свой класс.
- person sloth; 17.07.2012
Как насчет этого:
def my_func(*args):
my_sum = 0
for i in args:
my_sum += i
return my_sum
Если вы не хотите использовать оператор +=
, то
my_sum = my_sum + i
sum()
, заменив my_sum = 0
на my_sum = args[0]
, а цикл будет for i in args[1:]
. Теперь это работает с любым списком объектов с разумным методом __add__
.
- person Henry Gomersall; 17.07.2012
__radd__
в своем классе.
- person sloth; 17.07.2012
Если вы точно не будете использовать sum
, то что-то вроде:
def func(*args, default=None):
from operator import add
try:
return reduce(add, args)
except TypeError as e:
return default
or functools.reduce
in Py3
*args
тогдаargs
представляет собой список всех переданных аргументов. - person Some programmer dude   schedule 17.07.2012sum
? Это именно то, что он делает. - person David Cain   schedule 17.07.2012sum
в первую очередь. - person sloth   schedule 17.07.2012