surprised by import in python 2.6

Emile van Sebille emile at fenx.com
Fri Dec 10 17:40:01 EST 2010


On 12/10/2010 2:22 PM Ian said...
> On Dec 10, 3:06 pm, Stefaan Himpe<stefaan.hi... at gmail.com>  wrote:
>> Somehow, in the first session I cannot modify the global variable a
>> returned from f, but in the second session I can. To my eye, the only
>> difference seems to be a namespace. Can anyone shine some light on this
>> matter?
>
> It's not the same global variable.  In the second session, you import
> the module test and bind it to the name "test" in the main namespace.
> "test.a" and "test.f" refer to the objects named "a" and "f" in the
> test namespace.
>
> In the first session, you import all the variables exported by the
> module test and bind them using the same names in the main namespace.
> Thus "a" and "test.a" refer to the same int; and "f" and "test.f"
> refer to the same function, but they are not the same variables.  When
> you rebind the name "a", it does not also magically rebind "test.a",
> and vice versa.
>

Here's an example of what Ian's explained showing that f's global 
namespace is the test module:


emile at paj39:~$ cat > test.py
a = 3
def f():
    global a
    return a
emile at paj39:~$ python
Python 2.6.4rc2 (r264rc2:75497, Oct 20 2009, 02:55:11)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 >>> from test import *
 >>> import test
 >>> a
3
 >>> a = 4
 >>> f()
3
 >>> test.a = 5
 >>> f()
5
 >>>




More information about the Python-list mailing list