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

Reply via email to