if not DEBUG: log = null_log

Bengt Richter bokr at oz.net
Tue Jul 12 22:25:35 EDT 2005


On Wed, 13 Jul 2005 11:00:14 +1000, Simon Burton <simon at arrowtheory.com> wrote:

>
>Hi,
>
>I'm after a no-op command, so that i can redirect
>logging commands in performance critical code.
>
>Something like this:
>
>def log(*args): print args
>def null_log(*args): pass
>if not DEBUG: log = null_log
>
>is unacceptable because of the overhead of calling
>functions in python.
>
I think you could make the existence of log calls dependent on
whether you compile with an optimize flag by abusing
an assert statement, e.g.,

    assert log(some, args) or True

would always make the call in debug mode, but would never raise the exception
because of the "or True", even if log return None. If you compile with optimization,
the entire assert statement disappears from the byte code, UIAM.

if you use

    if __debug__: log(some, args)

I think[1] you still the the if-test code, though that is pretty quick
compared to a function call, so maybe you don't have to worry about it,
unless it is in a super-hot loop.

[1] I thought is saw somewhere that
    if __debug__: suite
might be completely optimized away like assert, but I couldn't locate it off hand.
It would seem pretty safe and useful though.

Regards,
Bengt Richter



More information about the Python-list mailing list