Variable Scope

J

Jens Thiede

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 += 1;


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 print x;

10

Any help would be appreciated,

Jens Thiede.
 
A

anton muhin

Jens said:
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 += 1;




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

print x;



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.
 
P

Peter Hansen

Jens said:
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.

Have you read http://www.python.org/doc/faq/programming.html#how-do-you-set-a-global-variable-in-a-function ?

It should clarify some of these issues. If it does not, please let us
know what's still unclear and the FAQ can be improved.

-Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,777
Messages
2,569,604
Members
45,234
Latest member
SkyeWeems

Latest Threads

Top