Kay Schluehr wrote: > Mac wrote: > > Is there a way to mimic the behaviour of C/C++'s preprocessor for > > macros? The problem: a lot of code like this: > > > > def foo(): > > # .... do some stuff > > if debug: > > emit_dbg_obj(DbgObjFoo(a,b,c)) > > > > # .... do more stuff > > if debug: > > emit_dbg_obj(DbgObjBar(d,e)) > > > > # ... and so on ... > > > > Notes: > > > > * the two-lines of debug conditional tend to really break up the flow > > of the surrounding code > > > > * in C you could wrap them with a macro so you could do > > DEBUG_EMIT(DbgObjFoo(a,b,c)), etc, with the macro only instantiating > > the object and processing it if the debug flag was set. The one-liner > > is MUCH less disruptive visually when reading code > > Make emit_dbg_obj() a class to create one-liners: > > class Emit_dbg_obj: > debug = True > def __init__(self, algo): > self.algo = algo > > def call_if_debug(self): > if self.debug: > return self.algo > > def foo2(): > # .... do some stuff > Emit_dbg_obj(DbgObjFoo(a,b,c)).call_if_debug() > > # .... do more stuff > Emit_dbg_obj(DbgObjFoo(c,d)).call_if_debug() > > > Ciao, > Kay
Hmmm... this won't work as expected. class Emit_dbg_obj: debug = True def __init__(self, algo, args): self.algo = algo self.args = args def call_if_debug(self): if self.debug: self.algo(*self.args) def foo2(): # .... do some stuff Emit_dbg_obj(DbgObjFoo,(a,b,c)).call_if_debug() # .... do more stuff Emit_dbg_obj(DbgObjFoo,(c,d)).call_if_debug() Regards, Kay -- http://mail.python.org/mailman/listinfo/python-list