Наличие выражения генератора в качестве входного аргумента в Python

Как я могу взаимодействовать со значениями выражения генератора? Например:

def sumValues(*args):
# compute the sum of values

sumValues(abs(x) for x in range(0,10))

Когда диапазон известен (например, мы знаем, что диапазон равен [0,10)), мы можем поставить цикл for, но что, если диапазон неизвестен?

2 ответа

Решение

Это зависит от того, как вы хотите, чтобы ваша функция вызывалась, если вы хотите вызывать ее с помощью списка, генератора или, в более общем случае, итерируемого (все, что может быть использовано в цикле for) и имитировать поведение встроенной функции. sum затем

def my_sum(iterable):
    total = 0
    for x in iterable:
        total += x
    return total

и использовать как

my_sum(range(10))
my_sum(abs(x) for x in range(0,10))
my_sum([1,2,3,4,5,6])

если вы хотите имитировать поведение max и использовать его, как указано выше, а также как my_sum(1,2), my_sum(1,2,3), my_sum(1,2,3,4,5,6,7) и т. д. тогда

def my_sum(*argv):
    total = 0
    values = None
    if len(argv) == 1:
        values = argv[0]
    else:
        values = argv
    for x in values:
        total += x
    return total

Я догадался. Вот ответ:

def sumValues(*args):
    # compute the sum of values
    total = 0
    for item in args[0]:
        total += item
    return total

print(sumValues(abs(x) for x in range(0,10)))
[output] => 45
Другие вопросы по тегам