Josiah Carlson wrote:
... I try to limit my use of decorators whenever possible, both because I still have to support Python 2.3 (which doesn't support the syntax), and because I find that they obfuscate what the code is doing more often than not. I will admit that they are useful as a metaprogramming technique. Just be careful.
I find them very useful in debugging (for example writing a decorator 'traced'), and have also used them to simplify code that puts a lot of functions into a dictionary. In the latter case, the function can be returned unadorned, or can be stored, and only the locater for the function returned: function_table = [] def enumerated(function): function_table.append(function) return len(function_table) - 1 @enumerated def triple(a, b, c): blah, blah, blah @enumerated def double(a, b): blah, blah, blah @enumerated def another(a, b, c): blah, blah, blah After all of that, the identifiers triple, double, and another refer to 0, 1, and 2 respectively, and you can call functions with the following structure: function_table[double]('pi', 3.14) This can be very useful for certain kinds of table-driven code (where you may want to be able to efficiently store lists of functions to call in data files). --Scott David Daniels scott.dani...@acm.org -- http://mail.python.org/mailman/listinfo/python-list