Наличие выражения генератора в качестве входного аргумента в 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