monik...@netzero.net wrote: > So generator function returns generator object according to Aaron Maxwell.
It's always nice to give a link or a quote. > But does this mean that each time yields "returns" it is a generator > object? So if there are 5 yield "returns" there are 5 generator objects? > Or is there always only one generator object returned by the generator > functions? Can somebody please explain? Thank you Monika ---------- By "generator function" he probably means something like >>> def f(): ... yield "foo" ... yield "bar" ... According to Python that's a function: >>> f <function f at 0x7fe3e137e488> Let's invoke it to see what it returns: >>> f() <generator object f at 0x7fe3e130f2d0> >>> f() <generator object f at 0x7fe3e130f360> >>> f() <generator object f at 0x7fe3e130f318> So these are indeed "generator objects", they are distinct (you get a new one on every invocation of f()) as you can verify by looking at their IDs (the hexadecimal numbers in the representation). However, the number of yield-s does not come into play yet. If there are any in the function body, it's not a "normal function", it's a "generator function". The yield-s show their effect when you iterate over the generator >>> for item in f(): print(item) ... foo bar or apply next(): >>> g = f() >>> next(g) 'foo' >>> next(g) 'bar' >>> next(g) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration The number of values you can get from a generator is not determined by the number of yield-s as one yield-expression may be executed more than once. The following example can run "forever": >>> def step(start, delta): ... value = start ... while True: ... yield value ... value += delta ... >>> two = step(0, 2) >>> three = step(42, 3) >>> >>> next(two) 0 >>> next(two) 2 >>> next(two) 4 >>> next(three) 42 >>> next(three) 45 >>> for a, b in zip(two, three): ... print(a, b) ... if a > 10: break ... 6 48 8 51 10 54 12 57 _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor