Writing to module-wide variable
Question: Lets say I have these 3 (tiny) python files -

**a.py**

    
    
    myvar = 'a'
    

**b.py**

    
    
    import a
    import c
    
    myvar = 'b'
    c.pr()
    

**c.py**

    
    
    from a import myvar
    
    def pr():
        print myvar
    

Now if I execute `b.py` I get output

    
    
    a
    

But I really want output to be as

    
    
    b
    

So please tell me how can I restructure/modify the programs so that the
_module-wide_ `myvar` can be assigned a different value.


Answer: In **b.py** , you are setting **b.py** 's myvar. You want to access a's value
of myvar. So **b.py** might look like:

    
    
    import a
    import c
    
    a.myvar = 'b' # belongs to a
    myvar = 'something different' # belongs to b
    c.pr()
    

And you need to update **c.py** so that it uses **a.py** 's myvar, not it's
own local copy. So **c.py** :

    
    
    import a
    
    def pr():
        print a.myvar
    

**Why?**

In your original **c.py** , when you call `from a import myvar`, this is
equivalent to:

    
    
    import a
    myvar = a.myvar
    

This makes a local version of `myvar` in **c.py** upon import. If this is
confusing, I found this [article](http://nedbatchelder.com/text/names.html)
about how python variables work very informative.

