"buffi" <[EMAIL PROTECTED]> wrote: > Is this concidered bad coding practice since I guess persistent > variables in functions are not meant to be? > There is a problem that this trick only works for functions and not for methods as it assumes that there is a global name through which you can access the function.
I think that more significantly is the question how you initialize the value (Lee Harr's decorator does that quite nicely though) or reset it, or have multiple instances each with their own saved value. As soon as you start asking those types of questions it is time to switch to using a class. So in short, yes it is a plausible trick in some situations as a lightweight alternative to a class which has only static state and one method, but if you want a second method or multiple instances you'll want a real class. (And yes, I do realise that by embedding the function with state inside a factory function you can create multiple instances.) Python also provides another lightweight way of saving state between calls. Consider whether your particular use can be written as a generator: def dostuff(): timesused = 0 print "First call!" while 1: timesused += 1 print "Function call", timesused yield timesused >>> fn = dostuff() >>> fn.next() First call! Function call 1 1 >>> fn.next() Function call 2 2 >>> fn.next() Function call 3 3 >>> timesused = fn.next() Function call 4 >>> print timesused 4 -- http://mail.python.org/mailman/listinfo/python-list