Similar ways to use generators in Python 3 -
i'm trying understand use of yield/generators in python. know, if given list of numbers (ex.: [1, 2, 3, 4, 5, 6, 7, 8, 9]
) 2 following statements equivalent. if not, what's difference?
x = (n n in numbers) return x n in numbers: yield n
as far know almost equivalent specified in pep 289:
g = (x**2 x in range(10)) print g.next()
is equivalent to:
def __gen(exp): x in exp: yield x**2 g = __gen(iter(range(10))) print g.next()
however it's almost equivalent, difference in case when iter(numbers)
evaluated:
>>> def f1(l): ... x = (n n in l) ... return x ... >>> def f2(l): ... n in l: ... yield n ... >>> a1 = f1(1) typeerror: 'int' object not iterable >>> a2 = f2(2) # works >>> next(a2) # fails after calling "next" typeerror: 'int' object not iterable
f1
try iter(l)
while f2
iter(l)
after calling next
on it.
to equivalent need pass iter(numbers)
function uses yield
.
Comments
Post a Comment