2017-08-10 2 views
0

Kann mir bitte jemand erklären, warum gibt es einen Unterschied im Drucken meiner Sequenz Generation zwischen "mit" und "ohne" für Schleife?Generatoren - Drucken generierte Werte

def generation(x): 
    i = 0 
    while i < x: 
     yield i 
     i += 1 

x = generation(10) 
print("Print without for loop: " + str(x)) 

print("Print with for loop: ") 
for j in x: 
    print(j) 
+0

Generatoren sind grundsätzlich faule Iteratoren. – erip

+1

versuchen 'print (" Drucken ohne For-Schleife: ", * x)' –

+0

Siehe https://stackoverflow.com/questions/1756096/understanding-generators-in-python –

Antwort

1

Ihre erste print druckt der Generator Objekt. Ihre zweite print ruft den Generator auf und durchläuft die erhaltenen Werte.

Dies ist ähnlich wie der Unterschied zwischen dem Wert eines Funktionsobjekts (Handle) und dem Aufruf der Funktion.

Ich denke, dass Sie vielleicht die Semantik Ihrer ersten print fehlinterpretieren. Um die Liste der Ganzzahlen in diesem Formular zu erhalten, benötigen Sie etwas, das durch den Generator iteriert:

+0

Nur 'liste (Generation (10))' funktioniert . Es ist kein Listenverständnis erforderlich. – Blckknght

+0

Guter Punkt. Ich habe versucht, die Verwendung von OP zu parallelisieren. Jetzt, da ich es im Druck sehe, ist die "Listen" -Operation besser. Die Antwort wird aktualisiert. – Prune