any macro-like construct/technique/trick?
Kay Schluehr
kay.schluehr at gmx.net
Sun Jun 5 10:46:41 EDT 2005
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
More information about the Python-list
mailing list