Ethan Furman wrote:
Hrm -- and functions/classes/etc would have to refer to each other that way as well inside the namespace... not sure I'm in love with that...


Not sure I hate it, either.  ;)

Slightly more sophisticated code:

<code>
class NameSpace(object):
    def __init__(self, current_globals):
        self.globals = current_globals
        self.saved_globals = current_globals.copy()
    def __enter__(self):
        return self
    def __exit__(self, *args):
        new_items = []
        for key, value in self.globals.items():
            if (key not in self.saved_globals and value is not self
                    or key in self.saved_globals
                    and value != self.saved_globals[key]):
                new_items.append((key, value))
        for key, value in new_items:
            setattr(self, key, value)
            del self.globals[key]
        self.globals.update(self.saved_globals)

if __name__ == '__main__':
    x = 'inside main!'
    with NameSpace(globals()) as a:
        x = 'inside a?'
        def fn1():
            print(a.x)
    with NameSpace(globals()) as b:
        x = 'inside b?'
        def fn1():
            print(b.x)
        def fn2():
            print('hello!')
            b.fn1()
    y = 'still inside main'
    a.fn1()
    b.fn1()
    print(x)
    print(y)
</code>

~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to