micropython/tests/basics/generator_closure.py

33 lines
697 B
Python

# a generator that closes over outer variables
def f():
x = 1 # closed over by g
def g():
yield x
yield x + 1
return g()
for i in f():
print(i)
# a generator that has its variables closed over
def f():
x = 1 # closed over by g
def g():
return x + 1
yield g()
x = 2
yield g()
for i in f():
print(i)
# using comprehensions, the inner generator closes over y
generator_of_generators = (((x, y) for x in range(2)) for y in range(3))
for i in generator_of_generators:
for j in i:
print(j)
# test that printing of closed-over generators doesn't lead to segfaults
def genc():
foo = 1
repr(lambda: (yield foo))
genc()