2

如何与生成器表达式的值进行交互?例如:

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

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

当范围已知时(例如,我们知道范围是 [0,10)),我们可以放一个 for 循环,但是如果范围未知怎么办?

4

2 回答 2

1

它取决于你希望你的函数如何被调用,如果你想用列表、生成器或更一般的可迭代(任何可以在 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
于 2017-02-12T17:43:53.800 回答
0

我估计。这是答案:

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
于 2017-02-12T17:19:45.033 回答