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