On Tue, 26 Dec 2006 15:01:40 -0800, buffi wrote:

>> def doStuff(some, arguments, may, *be, **required):
>>      try:
>>          doStuff.timesUsed += 1
>>      except AttributeError:
>>          doStuff.timesUsed = 1
>>          # ... special case for first call ...
>>      # ...common code...
> 
> True, the recursivity is not needed there I guess :)
> 
> It just feels so ugly to use try/except to enable the variable but I've
> found it useful at least once.

That's a matter of taste. Try replacing the try...except block with
hasattr:

def doStuff():
    if hasattr(doStuff, timesUsed):
        doStuff.timesUsed += 1
    else:
        doStuff.timesUsed = 1
    do_common_code

Here is another alternative, using the fact that Python creates default
values for arguments once when the function is compiled, not each time it
is run:

def doStuff(some, *arguments, 
    # don't mess with the following private argument
    __private={'timesUsed': 0, 'otherData': 'Norwegian Blue'}):
    """ Do stuff with some arguments. Don't pass the __private 
    argument to the function unless you know what you are doing,
    it is for private use only. 
    """
    __private['timesUsed'] += 1
    do_common_code



-- 
Steven.

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

Reply via email to