Viktor wrote: > Can somebody give me an explanation what happened here (or point me to > some docs)? > > Code: > > HMMM = None > > def w(fn): > print 'fn:', id(fn) > HMMM = fn > print 'HMMM:', id(HMMM)
This prints the id() of the local (to the function w()) HMMM variable > def wrapper(*v, **kw): > fn(*v, **kw) > wrapper.i = fn > print 'wrapper:', id(wrapper) > return wrapper > > class A: > @w > def __init__(self): pass > > print 'A.__init__:', id(A.__init__) > print 'A.__init__.i:', id(A.__init__.i) > print 'HMMM:', id(HMMM) while this prints the id() of the global HMMM variable. Python assumes that a variable is local to a function if there is an assignment to that variable anywhere inside that function. If you want to change the variable (Python-lingo "rebind the name") HMMM declare it as global in the function: def w(fn): global HMMM # ... HMMM = fn # ... Otherwise I've no idea what you are trying to do here... Peter -- http://mail.python.org/mailman/listinfo/python-list