1# test scoping rules 2 3# explicit global variable 4a = 1 5def f(): 6 global a 7 global a, a # should be able to redefine as global 8 a = 2 9f() 10print(a) 11 12# explicit nonlocal variable 13def f(): 14 a = 1 15 def g(): 16 nonlocal a 17 nonlocal a, a # should be able to redefine as nonlocal 18 a = 2 19 g() 20 return a 21print(f()) 22 23# nonlocal at inner-inner level (h) 24def f(): 25 x = 1 26 def g(): 27 def h(): 28 nonlocal x 29 return x 30 return h 31 return g 32print(f()()()) 33 34# nonlocal declared at outer level (g), and referenced by inner level (h) 35def f(): 36 x = 1 37 def g(): 38 nonlocal x 39 def h(): 40 return x 41 return h 42 return g 43print(f()()()) 44