Создание функции с аргументами переменной длины python - PullRequest
0 голосов
/ 26 сентября 2018

Мне нужно создать простую функцию, которая вычисляет совокупную сумму (каждое значение во входном кортеже должно быть заменено суммой всех значений до и включая текущее значение, таким образом (1, 2, 3) становится (1, 3)., 6)) его аргументы, которые вы можете предположить, передаются по значению.Используйте параметр переменной длины, чтобы получить доступ к этим значениям и вернуть результат в виде кортежа.

Я думаю использовать цикл for, но я не знаю, как ссылаться на предыдущий элемент в переменной длиныаргумент.Ниже приведено то, что у меня есть.

def simple_tuple_func(*args):
#  Compute cumulative sum of each value
    print(type(args))
    for idx in args:
        **idx += {itm}**
simple_tuple_func(1,2,3)

Строка, которую я выделил жирным шрифтом, - это то, где я не уверен, как ссылаться на предыдущий элемент в кортеже (или список, словарь или любой другой элемент, заданный какаргумент для функции. Я полагаю, что это сработало бы, если бы у меня была правильная строка?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Можно добавить кумулятивные суммы в отдельный список для вывода, чтобы можно было использовать индекс -1 для доступа к предыдущей кумулятивной сумме:

def simple_tuple_func(*args):
    cumulative_sums = []
    for i in args:
        cumulative_sums.append((cumulative_sums[-1] if cumulative_sums else 0) + i)
    return tuple(cumulative_sums)

, чтобы:

simple_tuple_func(1,2,3)

вернется:

(1, 3, 6)
0 голосов
/ 26 сентября 2018

Просто используйте itertools.accumulate:

def simple_tuple_func(*args):
    return tuple(itertools.accumulate(args, lambda x, y: x+y))

Или с циклом:

def simple_tuple_func(*args):
    res = []
    if not args:
      return res
    accum, *tail = args #unpacking, accum will take first element and tail de rest elements in the args tuple
    for e in tail:
        res.append(accum)
        accum += e
    res.append(accum)
    return tuple(res)

Здесь у вас есть живой пример

...