the global keyword:
BartC
bc at freeuk.com
Sun Jun 12 15:07:52 EDT 2016
On 12/06/2016 00:44, Marcin Rak wrote:
> Hi to all.
>
> I have the following file named Solver.py:
> *****************************************
> from Test import some_function, my_print
> from Test import test_var
>
> some_function()
> my_print()
> print(test_var)
> *****************************************
>
> and I have the following Test.py:
> *****************************************
> test_var = 5
>
> def some_function():
> global test_var
> test_var = 44
> print("f {0}".format(test_var))
>
> def my_print():
> print(test_var)
> *****************************************
>
> Would you believe it that when I run Solver.py I get the following output:
> f 44
> 44
> 5
>
> So my question is, how the heck is it possible that I get 5 as the last value printed? the global test_var (global to Test.py) I set to 44 when I ran some_function()??? does anyone have a clue they could throw my way?
I was puzzled too. Apparently importing stuff using 'from':
from Test import a,b,c
is equivalent to:
import Test
a = Test.a
b = Test.b
c = Test.c
which I hadn't been aware of. Then the link between a and Test.a (eg.
Test.test_var) is broken (unless Test.a is something like a list so both
still refer to the same data. But assignment to either - not an in-place
mod - will break the connection).
Your code could be rewritten as:
from Test import some_function, my_print
import Test
some_function()
my_print()
print(Test.test_var)
Anyway, it shows Python doesn't have true cross-module globals.
--
Bartc
More information about the Python-list
mailing list