global variable across modules

Dave Angel davea at davea.name
Wed Sep 11 16:02:32 EDT 2013


On 11/9/2013 08:50, chandan kumar wrote:

> Hi ,
>
> I'm trying to understand using global variable across different modules.

Python doesn't have such a thing, unless you consider builtins.

> Here is what i have tried so far without much success.Please ignore any
> indentation issue  in the below code.
>

Which one is the script, and which one an imported module?  You have
bugs ether wayl, but different ones.  I have to assume something, so
I'll assume Test2.py is your script.

> Filename:Test1.py
>
> Debug_Value = " "
>
> import Test2

Nasty business.  Any time you have recursive imports, you can expect
trouble.  But importing the script is doubly bad.  You'll be importing a
second copy of the script, pretending it's a module, and you'll be
RUNNING it before this Test1 module.  Maybe that doesn't matter, since
the script does nothing useful.  But once you fix the other problems,
this one will be a big problem.

>
> def globalValmethod():
>     global Debug_Value 
>     Debug_Value =10
>     Test2.globalValTest()
>
> globalValmethod() -----Execute the method
>
> Filename:Test2.py
>
> import Test1
> from Test1 import *

Bad practice.  I wish the above syntax were not in the language.

>
> def globalValTest()
>     print "Golabal Value" Debug_Value 

You omitted any top-level code, so this function won't be called anyway.

>     
> In Test2.py file I wanted to print the global value ,Debug_Value as 10.I'm not getting expected result.Please can any one point where exactly i'm doing wrong.

After you fix the above, you'll still have the problem that you
apparently don't understand that these "variables" are names referring
to objects.  If you have two names bound to the same object, and you
rebind one of them (inside globalValmethod()), the other remains
bound to the original object.

After you rename your files so I can tell which one is intended as the
script, and which as the module, then clean up the other problems, and
remove one of the imports. Then if you're still confused, ask again.


>
> Similarly , how can i use global variable  inside a class and use the same value of global variable in different class?Is that possible?if Yes please give me some pointers on implementing. 

There are no global variables inside a class.  There are class
attributes which are sort-of global, and it's legal to use the global
statement inside a method, as with any other function.


But the main question is probably, why are you so hung up on globals? 
If it's changeable, it usually should NOT be global.  Good uses for
globals are things like math.pi or command-line options.  The first is
always the same, and the second is initialized before anyone will use
it, and never changed afterwards.

incidentally, class names, module names, and top-level function names
are also global, and these are normally not changeable.


-- 
DaveA





More information about the Python-list mailing list