Variable Scope

anton muhin antonmuhin at rambler.ru
Fri Jan 9 14:30:10 EST 2004


Jens Thiede wrote:

> In the following terminal; could someone inform me as to why it is
> posible to print a global variable without having to declare it using
> global. This has affected some source of mine, and allows you to
> modify a global in a local scope *without* the global keyword, for
> instance, you can append to a global list, but *not* assign it a new
> value, for then, you create a new local variable. -- Why.
> 
> Python 2.3.2 (#1, Jan  3 2004, 23:02:08) 
> [GCC 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r3, propolice)] on linux2
>     
> IDLE 1.0      
> 
>>>>x = 10;
>>>>def test():
> 
> 	x += 1;
> 
> 
> 
>>>>test();
> 
> 
> Traceback (most recent call last):
>   File "<pyshell#5>", line 1, in -toplevel-
>     test();
>   File "<pyshell#4>", line 2, in test
>     x += 1;
> UnboundLocalError: local variable 'x' referenced before assignment
> 
>>>>def test2():
> 
> 	print x;
> 
> 	
> 
>>>>test2();
> 
> 10
> 
> Any help would be appreciated,
> 
> Jens Thiede.

I suppose because Python prohibits rebinding of global variables, not 
modifications. You actually cannot change an integera (as an immutable 
type) with rebinding a varibale. Lists (as mutable types) allows 
modifications without rebinding. E.g.

l = []

def f1():
   l.append(0)

def f2():
   l = l + [0]

f1()
print l

f2()
print l

Python says:
[0]
Traceback (most recent call last):
   File "1.py", line 12, in ?
     f2()
   File "1.py", line 7, in f2
     l = l + [0]
UnboundLocalError: local variable 'l' referenced before assignment

regards,
anton.



More information about the Python-list mailing list