2017-02-12 8 views
0

Wie kann ich mit den Werten eines Generatorausdrucks interagieren? Zum Beispiel:Einen Generatorausdruck als Eingabeargument in Python haben

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

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

Wenn der Bereich bekannt ist (zum Beispiel wissen wir, der Bereich [0,10 ist)), können wir eine for-Schleife setzen, aber was ist, wenn der Bereich ist nicht bekannt?

+0

für diesen Fall, dass Sie auch die Build-in [ 'sum'] (https://docs.python.org/2/library verwenden können /functions.html#sum) Funktion – Copperfield

+0

Danke, aber ich wollte vermeiden, eine der eingebauten Funktionen zu verwenden. – Hercules

Antwort

1

es hängt davon ab, wie Sie Ihre Funktion soll aufgerufen werden, wenn Sie es mit der Liste anrufen möchten, Generator, oder allgemeiner ein iterable (etwas, das verwendet werden kann, in eine for-Schleife) und das Verhalten des Build-in sum dann

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

und wie

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

verwenden imitieren, wenn Sie das Verhalten von max und es verwenden, imitieren wollen wie oben und auch wie my_sum(1,2), my_sum(1,2,3), my_sum(1,2,3,4,5,6,7) usw. dann

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 
+0

ist der Punkt kristallklar gemacht. Vielen Dank! – Hercules

0

Ich dachte. Hier ist die Antwort:

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 
Verwandte Themen