I have the following module implementing a registry of functions with a 
decorator:

$ cat x.py
registry = {} # global dictionary

def dec(func):
    registry[func.__name__] = func
    print registry, id(registry)
    return func

if __name__ == '__main__':
    import xlib
    print registry, id(registry)

The library xlib just defines two dummy functions:

$ cat xlib.py
from x import dec

@dec
def f1():
    pass

@dec
def f2():
    pass

Then I get the following output:

$ python x.py
{'f1': <function f1 at 0x7f7bce0cd668>} 27920352
{'f1': <function f1 at 0x7f7bce0cd668>, 'f2': <function f2 at 0x7f7bce0cd6e0>} 
27920352
{} 27395472

This is surprising since I would expect to have a single global dictionary, not 
two: how comes the registry inside the ``if __name__ == '__main__'`` block is 
different from the one seen in the library?

This is python 2.7.3 on Ubuntu.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to