summaryrefslogtreecommitdiff
path: root/tests/basics/scope_implicit.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/scope_implicit.py')
-rw-r--r--tests/basics/scope_implicit.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/basics/scope_implicit.py b/tests/basics/scope_implicit.py
new file mode 100644
index 000000000..aecda7715
--- /dev/null
+++ b/tests/basics/scope_implicit.py
@@ -0,0 +1,31 @@
+# test implicit scoping rules
+
+# implicit nonlocal, with variable defined after closure
+def f():
+ def g():
+ return x # implicit nonlocal
+ x = 3 # variable defined after function that closes over it
+ return g
+print(f()())
+
+# implicit nonlocal at inner level, with variable defined after closure
+def f():
+ def g():
+ def h():
+ return x # implicit nonlocal
+ return h
+ x = 4 # variable defined after function that closes over it
+ return g
+print(f()()())
+
+# local variable which should not be implicitly made nonlocal
+def f():
+ x = 0
+ def g():
+ x # local because next statement assigns to it
+ x = 1
+ g()
+try:
+ f()
+except NameError:
+ print('NameError')