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