On Sat, 04 Aug 2012 21:16:04 -0700, JW Huang wrote:
> Hi,
> How can I implement something like C++'s conditional compile.
> if VERBOSE_MODE: print debug information else: do nothing
> But I don't want this condition to be checked during runtime as it will
> slow down the code.
You've profiled your code and found that checking a flag is a bottleneck in your application? I'd hate to think you were wasting your time trying to avoid "slowing down" your code by an insignificant amount that nobody will ever notice.
In general, the way to do C-like conditional compiles is to use C, or at least to use another language that isn't Python. Almost everything happens at runtime in Python. Possibly PyPy can optimise away unnecessary checks, but CPython doesn't.
One of the very few exceptions: you can disable code at compile time like this:
if __debug__:
do_something()
compiles to the byte-code equivalent of:
do_something()
under normal circumstances, and to nothing at all if Python is running with the -O optimize flag.
If you are working in a tight loop, you can do this:
if VERBOSE_FLAG:
for item in loop:
print(DEBUG_INFORMATION)
do_actual_work(item)
else:
for item in loop:
do_actual_work(item)
I used this in something that was operating at the packet socket level. I had no time to test if debug was true.
-- Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net
> Serhiy Storchaka <storch...@gmail.com> writes:
>> On 05.08.12 09:30, Steven D'Aprano wrote:
>>> If you are working in a tight loop, you can do this:
>>> if VERBOSE_FLAG:
>>> for item in loop:
>>> print(DEBUG_INFORMATION)
>>> do_actual_work(item)
>>> else:
>>> for item in loop:
>>> do_actual_work(item)