Generator hinter einem Callable verstecken?
Verfasst: Freitag 20. Januar 2012, 20:45
Hallo zusammen,
ich steh grad auf dem Schlauch und komme einfach nicht drauf. Ich suche eine Möglichkeit, wie ich ein `callable` definieren kann, welches beim Aufruf eine intern definierte Datenstruktur iteriert, so dass bei jedem Aufruf des `callables` der nächste Wert zurückgegeben wird, solange bis das Iterable am Ende angelangt ist.
Zur Verdeutlichung mal als Beispiel:
Beim ersten Aufruf von `func` wird das erste Element zurückgegeben, beim zweiten Aufruf das zweite, usw.
Ich kann das natürlich so angehen:
Aber so muss ich mir ja "global" `iobj` merken - geht das nicht irgend wie innerhalb einer Funktion?
Das kann doch nicht so schwer sein... :K
ich steh grad auf dem Schlauch und komme einfach nicht drauf. Ich suche eine Möglichkeit, wie ich ein `callable` definieren kann, welches beim Aufruf eine intern definierte Datenstruktur iteriert, so dass bei jedem Aufruf des `callables` der nächste Wert zurückgegeben wird, solange bis das Iterable am Ende angelangt ist.
Zur Verdeutlichung mal als Beispiel:
Code: Alles auswählen
def func():
data = ["Hello", "World"]
# magic
func()
-> Hello
func()
-> World
Ich kann das natürlich so angehen:
Code: Alles auswählen
In [153]: def foo():
.....: for item in ("Hello", "World"):
.....: yield item
.....:
.....:
In [154]: def call(iterator):
.....: return iterator.next()
.....:
In [155]: iobj = foo()
In [156]: call(iobj)
Out[156]: 'Hello'
In [157]: call(iobj)
Out[157]: 'World'
Das kann doch nicht so schwer sein... :K