I'm trying to write a decorator that causes a function to do nothing if called more than once- the reason for this is trivial and to see if I can (Read- I'm enjoying the challenge, please don't ruin it for me =] )
However I'm getting strange results with Python 2.6.2 on win32. With this code: def callonce(func): def nullmethod(): pass def __(): return func() return __ @callonce def t2(): print "T2 called" t2() It does exactly what you'd expect, prints "T2 called" However: def callonce(func): def nullmethod(): pass def __(): return func() func = nullmethod return ret return __ @callonce def t2(): print "T2 called" t2() Gives me: C:\tmp\callonce>callonce.py Traceback (most recent call last): File "C:\tmp\callonce\callonce.py", line 27, in <module> t2() File "C:\tmp\callonce\callonce.py", line 12, in __ return func() UnboundLocalError: local variable 'func' referenced before assignment Any ideas on why? This looks like a bug to me, but I'm quite new to this style of programming so it may be some nuance I'm not aware of. Thanks in advance. Rich Healey -- http://mail.python.org/mailman/listinfo/python-list