SIngleton from __defaults__

Terry Reedy tjreedy at udel.edu
Thu Jan 23 19:10:17 EST 2014


>   Johannes Schneider <johannes.schneider at galileo-press.de> Wrote in
>   message:
>> On 22.01.2014 20:18, Ned Batchelder wrote:
>>> On 1/22/14 11:37 AM, Asaf Las wrote:
>>> Chris is right here, too: modules are themselves singletons, no matter
>>> how many times you import them, they are only executed once, and the
>>> same module object is provided for each import.
>>
>> I'm not sure, if this is the whole truth.
>>
>> think about this example:
>>
>> cat bla.py
>> a = 10
>>
>> cat foo.py
>> from bla import a

This makes a a global in foo, bound to 10

>> def stuff():
>>           return a

This a refers to the global a in foo.

>> cat bar.py
>> from foo import stuff
>> print stuff()
>> a = 5

This bar.a is irrelevant to the behavior of stuff.

>> print stuff()
>>
>> from bla import *
>> print a
>>
>> python bar.py
>> 10

foo.a == 10

>> 10

foo.a == 10

>> 10

bla.a == 10

>> here the a is coming from bla

Twice

and is known in the global namespace.

There is no global namespace outside of modules.

>> the value differs in stuff()

No it does not.

and before/after the import statement.

foo.a does not change. bar.a is never used.

>> So the instance of the module differs

Nope. Each of the three module instances is constant. The bindings 
within each could change, but there are no rebinding in the code above.

-- 
Terry Jan Reedy




More information about the Python-list mailing list