any macro-like construct/technique/trick?
Roy Smith
roy at panix.com
Sun Jun 5 08:55:12 EDT 2005
"Mac" <idontneednostinkinid at yahoo.com> wrote:
> Is there a way to mimic the behaviour of C/C++'s preprocessor for
> macros?
> [...]
>
> * using
> def debug_emit(obj):
> if debug:
> emit_dbg_obj(obj)
> is a poor solution, because it *always* instantiates DbgObj*, even when
> not needed; I want to avoid such unnecessary waste
How about using assert statements? When you run with optimization turned
on, they don't even get compiled. Try something like this:
class Debug:
def __init__ (self, message):
print "debug (%s)" % message
print "foo"
assert (Debug ("bar"))
which produces:
Roy-Smiths-Computer:play$ python x.py
foo
debug (bar)
Roy-Smiths-Computer:play$ python -O x.py
foo
Notice that the Debug() object doesn't even get created when optimization
is turned on. It's a little funky, but at least anybody who knows python
will understand your code. I agree with Andrew Dalke when he says of
preprocessors:
> It's typically a bad idea because you're in essence creating a
> new language that is similar to but not Python, making it harder
> for people to understand what's going on.
More information about the Python-list
mailing list