python - Why does next() always display the same value? -
i practicing yield
statement. have written following function in python 2.7:
>>> def mygen(): ... = 0 ... j = 3 ... k in range(i, j): ... yield k ... >>> mygen().next() 0 >>> mygen().next() 0 >>> mygen().next() 0
whenever call mygen().next()
displays output 0
, instead of 0
, 1
, 2
& stopiteration
. can please explain this?
you recreating generator each time, starts beginning each time.
create generator once:
gen = mygen() gen.next() gen.next() gen.next()
generator functions produce new iterator every time call them; way can produce multiple independent copies. each independent iterator invocation of function can stepped through separately others:
>>> def mygen(): ... = 0 ... j = 3 ... k in range(i, j): ... yield k ... >>> gen1 = mygen() >>> gen2 = mygen() >>> gen1.next() 0 >>> gen1.next() 1 >>> gen2.next() 0 >>> gen2.next() 1 >>> gen1.next() 2 >>> gen1.next() traceback (most recent call last): file "<stdin>", line 1, in <module> stopiteration
note want use next()
function instead of calling generator.next()
directly:
next(gen)
generator.next()
considered hook (python 3 renamed generator.__next__()
, next()
function official api invoke in cross-version compatible way.
Comments
Post a Comment