On Nov 12, 5:30 pm, "Peter J. Bismuti" <[EMAIL PROTECTED]> wrote: > I'm having trouble understanding how namespaces work in modules. I want to > execute a module within the interpreter and then have values that are > calculated persist so that other modules that get executed can retrieve them. >
Modules retain state their state across all imports in the same interpreter instance. Module state is not shared among different instances of the interpreter. > For example, consider the two simple modules below. The first method fails > and I'm not sure exactly why. (Note: assume one instance of an interpreter. > In my case a 3rd party software tool that starts an interpreter when it > launches). > > Two alternate ways of running it: > > 1. (FAILS: RESULTS A = 0) Use the module "test" itself as the driver using > the conditional statement if (__name__=="__main__"): > > test.py > run2.py > Ok, what do you mean by this? Do you mean run test.py and then run run2.py? In so, then you will have *two* instances -- one for each file being executed. You can only have one main module per interpreter instance. I suspect this is the source of your confusion. > or, > > 2. (SUCCES: RESULTS A = 10) Use "run.py" as the driver. > > run.py > > _________test.py__________________ > > import sys,os > > A = 0 > > def getA(): > global A > return A > > def run(): > global A > A = 10 > > if (__name__=="__main__"): > run() > Here, A is only initialized when the module is loaded iff it is the main module. If it's not the main module, then it will have A set to 0 until some other code calls run(). > _________run.py__________________ > > import test > > test.run() > print "A = " + str(test.getA()) > This code calls test.run(), which is necessary for A to be 10. > _________run2.py__________________ > > import test > > print "A = " + str(test.getA()) > > -- > This code gets the value of test.A without calling test.run(). Since test.run() was not called, A is the value it was initialized when the test module was loaded -- namely, 0. Hope this helps, --Nathan Davis -- http://mail.python.org/mailman/listinfo/python-list