2015-09-07 16:55:02 +01:00
|
|
|
# test scoping rules
|
|
|
|
|
|
|
|
# explicit global variable
|
|
|
|
a = 1
|
|
|
|
def f():
|
|
|
|
global a
|
|
|
|
global a, a # should be able to redefine as global
|
|
|
|
a = 2
|
|
|
|
f()
|
|
|
|
print(a)
|
|
|
|
|
|
|
|
# explicit nonlocal variable
|
|
|
|
def f():
|
|
|
|
a = 1
|
|
|
|
def g():
|
|
|
|
nonlocal a
|
|
|
|
nonlocal a, a # should be able to redefine as nonlocal
|
|
|
|
a = 2
|
|
|
|
g()
|
|
|
|
return a
|
|
|
|
print(f())
|
2016-09-30 05:20:55 +01:00
|
|
|
|
|
|
|
# nonlocal at inner-inner level (h)
|
|
|
|
def f():
|
|
|
|
x = 1
|
|
|
|
def g():
|
|
|
|
def h():
|
|
|
|
nonlocal x
|
|
|
|
return x
|
|
|
|
return h
|
|
|
|
return g
|
|
|
|
print(f()()())
|
|
|
|
|
|
|
|
# nonlocal declared at outer level (g), and referenced by inner level (h)
|
|
|
|
def f():
|
|
|
|
x = 1
|
|
|
|
def g():
|
|
|
|
nonlocal x
|
|
|
|
def h():
|
|
|
|
return x
|
|
|
|
return h
|
|
|
|
return g
|
|
|
|
print(f()()())
|