rekursiver Generator

10/10/2009 - 12:34 von Thomas Orgelmacher | Report spam
Hallo zusammen!

Ich hoffe 'mal, das ist jetzt keine FAQ. Aber als Python-Neuling
komme ich hier absolut nicht weiter:

def t(n):
yield n
if(n < 10):
t(n + 1)

for i in t(0):
print(i)

Warum tut das so nicht? Wenn ich das richtig verstanden habe,
wird der komplette Zustand einer Funktion bei einem yield gesichert
und beim nàchsten "Aufruf" wird nach dem yield weitergemancht.
Das funktioniert auch soweit (ich habe testhalber 'mal nach jeder
Zeile ein print eingefügt), aber die Rekursion funktioniert nicht.


Gruß,

Orgel

I have seen things you lusers would not believe. I've seen Sun
monitors on fire off the side of the multimedia lab. I've seen
NTU lights glitter in the dark near the Mail Gate. All these
things will be lost in time, like the root partition last week.
 

Lesen sie die antworten

#1 Diez B. Roggisch
10/10/2009 - 12:39 | Warnen spam
Thomas Orgelmacher schrieb:
Hallo zusammen!

Ich hoffe 'mal, das ist jetzt keine FAQ. Aber als Python-Neuling
komme ich hier absolut nicht weiter:

def t(n):
yield n
if(n < 10):
t(n + 1)

for i in t(0):
print(i)

Warum tut das so nicht? Wenn ich das richtig verstanden habe,
wird der komplette Zustand einer Funktion bei einem yield gesichert
und beim nàchsten "Aufruf" wird nach dem yield weitergemancht.
Das funktioniert auch soweit (ich habe testhalber 'mal nach jeder
Zeile ein print eingefügt), aber die Rekursion funktioniert nicht.



Weil du immer wenn du einen Wert zurueckgeben willst ein yield brachst.
Woher soll python das sonst wissen?

def t(n):
yield n
if n < 10: # keine Klammern, wir sind hier nicht in C/Java/*
yield t(n+1)


Diez

Ähnliche fragen