summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics/generator_closure.py
blob: d8a517edeb977cea9c187d4a5370851d8053731a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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)