Andrew's approach is good, but you could so something a little
simpler/more flexible. Untested of course. :-)
Every callable object is followed by the args to pass it. So this:
debug_emit(DbgObjFoo(a, b, costly_function(c)))
becomes:
debug_emit(DbgObjFoo, (a, b, costly_function, (c,)))
def debug_emit(*args):
if not debug:
return
# assume last arg is not a callable and skip it
i = len(args) - 2
while i > 0:
if callable(args[i]):
# call it! assume the next arg is a tuple of params
new_value = args[i](*args[i+1])
args = args[:i] + (new_value,) + args[i+2:]
emit_dbg_code(*args)
cheers,
n
--
http://mail.python.org/mailman/listinfo/python-list