+ 1
Why are these 2 generators different?
https://code.sololearn.com/ch307I4u0iKi/?ref=app gen1 and gen2() are both generators and you could use them in a loop the same way, but... If you use next() several times you won't get the same result : gen2() seems to rewind every time you call next() while gen1 will successively display the expected values as in a loop. Besides you can use gen1 only once while you can use gen2() as many times as you want. Why is that? Is there a way to get the successive values of gen2 using next()?
2 Respostas
+ 5
They are both generators, but you're calling them in a different way. gen1 = (x for x in range(3)) creates a generator object and with next(gen1) you're getting the next item from the same generator object until the generator is exhausted.
next(gen2()) will create a new generator object each time you call it, so with each call it will start over again.
To get the same result as with gen1(), create a generator object first and then call next() on that object, not on the function:
x = gen2()
print(next(x)) # 0
print(next(x)) # 1 etc.
+ 1
Thank you for your answer Anna! I think I get it now : gen2 is a function which creates a generator when called. It all makes sense.