access interactive namespace from module (shared namespace?)

TeroV teroV at nowhere.invalid
Sun May 25 06:17:46 EDT 2008


Ulrich Dorda wrote:
> I've got a probably embarrassing trivial problem with namespaces, but 
> couldn't solve it myself nor find an answer in the net. Hopefully one of 
> you guys can help me.
> 
> What I want to do:
> Use the interactive shell and e.g define the variable a there.
> Then load a module and access a from within.
> 
> e.g file "utest.py"
> 
> def doit():
>     print 2*a
> 
> in the shell:
> 
> import utest
> a=3
> utest.doit()  <- I want this to print 2*a, but of course obtain: <type 
> exceptions.NameError'>: global name 'a' is not defined
> 
> Any change I do to a in the shell should be seen from the doit() 
> function, any variable assignment I do in the doit() function should be 
> seen in the shell. I guess it's somehow a namespace sharing.
> 
> Actually the function doit() will contain an eval() function that should 
> evaluate a (via a gui) dynamically inserted expression.
> 
> Any one got a clue? (a clue what I try to say and how to help?!)
> 
> Thanks a lot in advance!!
> 
> Ulrich
> 
> 

Here is one way

#utest.py:
def doit(valuemap):
     print 2*valuemap['a']

Python 2.5.1 (r251:54863, Mar  7 2008, 04:10:12)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 >>> a = 4
 >>> import utest
 >>> utest.doit(locals())
8
 >>>



More information about the Python-list mailing list