Global variables and modules
Binu K S
binux.lists at gmail.com
Fri Dec 24 01:16:25 EST 2004
Add these lines to test1.py and see what you get:
import test2
print 'test2.glbl postinc ', test2.glbl
This will work as you expect.
Next try chaning glbl in test2 to a list (a mutable type).
test2.py:
glbl = [25]
def inc_glbl():
global glbl
glbl[0] = glbl[0] + 1
def get_glbl():
global glbl
return glbl[0]
test1.py:
from test2 import glbl, inc_glbl, get_glbl
print 'glbl orig ', glbl[0]
inc_glbl()
print 'glbl postinc ', glbl[0]
new = get_glbl()
print 'glbl from func ', new
import test2
print 'test2.glbl postinc ', test2.glbl
[kbinu at localhost kbinu]$ python2.2 test.py
glbl orig 25
glbl postinc 26
glbl from func 26
test2.glbl postinc [26]
On 23 Dec 2004 21:43:40 -0800, dkeeney at travelbyroad.net
<dkeeney at travelbyroad.net> wrote:
>
> I have a newby type question on how global variables work between
> modules.
>
> I have a module test2.py that defines a global variable as well as two
> functions to operate on that variable. A script test1.py imports the
> three names and prints out values of the global between operations, and
> the results aren't what I expected.
>
> Here is the module, test2.py
> ------------------------------------
> glbl = 25
>
> def inc_glbl():
> global glbl
> glbl += 1
>
> def get_glbl():
> global glbl
> return glbl
> ------------------------------------
>
> and here is the test script, test1.py
> -------------------------------------
>
> from test2 import glbl, inc_glbl, get_glbl
>
> print 'glbl orig ', glbl
>
> inc_glbl()
> print 'glbl postinc ', glbl
>
> new = get_glbl()
> print 'glbl from func ', new
> --------------------------------------
> I would expect the three values to be ( 25, 26, 26 ), but what I get is
> c:\projects\pitcher_model>test1.py
> glbl orig 25
> glbl postinc 25
> glbl from func 26
>
> ---------
> It seems that the references to 'glbl' are seeing a local copy, rather
> than the original. This is not what the literature says should be
> happening. I am looking for a way to share data between modules. Can
> you advise me on my error? I am using Python 2.3.2 from ActiveState,
> on Windows XP Pro.
>
> Thank you
> David
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list