summaryrefslogtreecommitdiffstatshomepage
path: root/tests/basics
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-04-09 19:01:45 +0100
committerDamien George <damien.p.george@gmail.com>2014-04-09 19:01:45 +0100
commit13d6739cc7a538023d8a6a648d2907b4730d7132 (patch)
treec802086515ff035b6cd213a3957664a82f5860c1 /tests/basics
parent2bf7c092225645d8c5b15e536afdce39e3593e42 (diff)
downloadmicropython-13d6739cc7a538023d8a6a648d2907b4730d7132.tar.gz
micropython-13d6739cc7a538023d8a6a648d2907b4730d7132.zip
py: Generators can have their locals closed over.
Diffstat (limited to 'tests/basics')
-rw-r--r--tests/basics/generator-closure.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/basics/generator-closure.py b/tests/basics/generator-closure.py
new file mode 100644
index 0000000000..d8a517edeb
--- /dev/null
+++ b/tests/basics/generator-closure.py
@@ -0,0 +1,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)