Seite 1 von 1

was bewirkt 'yield' befehl?

Verfasst: Dienstag 7. September 2004, 18:06
von david_
hi,
kann mir jemand erklaeren was der 'yield'-befehl bewirkt?

etwas in diesem zusammenhang:

Code: Alles auswählen

for e in postorder(tree[1]): yield e
oder

Code: Alles auswählen

   
tmp = [tree]
while tmp[0]:
    node, left, right = tmp[0]
    yield node
also ich code schon laenger mit python aber den befehl aber bisher noch nie benoetigst oder in einem programm gesehen. kennst ihn jemand?

Verfasst: Dienstag 7. September 2004, 19:07
von Dookie
Hi David,

yield wird für Iteratoren benötigt:

Code: Alles auswählen

def zaehler(start=0):
    cnt = start
    while True:
        yield cnt
        cnt += 1

iterator = zaheler()
print "iterator =", iterator.next()
for i in xrange(10):
    print "i = %i, iterator = %i" %(i, iterator.next())
Jeder Aufruf von next(), geht bis zum nächsten yield und gibt den Wert hinter yield zurück. Iteratoren können auch in for-Schleifen oder zur erzeugung von Listen verwendet werden. Wird die Iteratorfunktion beendet, Wird eine "StopIteration" Exception geworfen.


Gruß

Dookie

Verfasst: Dienstag 7. September 2004, 22:04
von david_
danke. habs verstanden.

PS: bei der for-schleife fehlt der ':' am ende :)

Verfasst: Dienstag 7. September 2004, 23:10
von Dookie
jetzt is er da, wollte nur sehen ob du aufpasst ;)


Dookie

Verfasst: Mittwoch 8. September 2004, 17:12
von Milan
HI. Ein schöner Link dazu: http://docs.python.org/whatsnew/section-generators.html . Schau dir auch mal das Modul itertools an, mit dem kann man wunderschön programmieren (noch schöner gehts seit Python 2.4 mit generator expressions :D ).

Verfasst: Mittwoch 8. September 2004, 18:19
von Leonidas
Durch yield wird eine funktion zum generator.

Code: Alles auswählen

from __future__ import generators