from xx import yy
Rick Johnson
rantingrickjohnson at gmail.com
Mon Nov 13 00:07:21 EST 2017
On Sunday, November 12, 2017 at 8:18:04 PM UTC-6, bvdp wrote:
> I'm having a conceptual mind-fart today. I just modified a bunch of code to use "from xx import variable" when variable is a global in xx.py. But, when I change/read 'variable' it doesn't appear to change. I've written a bit of code to show the problem:
>
> mod1.py
> myvar = 99
> def setvar(x):
> global myvar
> myvar = x
>
> test1.py
> import mod1
> mod1.myvar = 44
> print (mod1.myvar)
> mod1.setvar(33)
> print (mod1.myvar)
>
> If this test1.py is run myvar is fine. But, if I run:
>
> test2.py
> from mod1 import myvar, setvar
> myvar = 44
> print (myvar)
> setvar(33)
> print (myvar)
>
> It doesn't print the '33'.
>
> I thought (apparently incorrectly) that import as would
> import the name myvar into the current module's namespace
> where it could be read by functions in the module????
No.
> test2.py
> from mod1 import myvar, setvar
Be aware that the previous line creates a _local_ "module-
level variable" (in test2.py) named `myvar`, and assigns it
the value of `99`. And also be aware that changes to this
variable will not be reflected in `mod1'. As they are in no
way connected.
However, *SNIFF-SNIFF*, i smell a major flaw in this design.
Why would you create a function to modify a module level
variable anyway? If you want to modify a MLV from another
module (aka: externally), then why not modify it using an
explicit dot path? Observe:
# from inside an external module
import mod1
mod1.myvar = "foo"
Now `myvar` is a string.
So what is the point of this external modification? Are you
attempting to share state between modules?
More information about the Python-list
mailing list