Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #26524 > unrolled thread

conditional running of code portion

Started byJW Huang <ngcbmy@gmail.com>
First post2012-08-04 21:16 -0700
Last post2012-08-05 22:50 -0400
Articles 6 — 5 participants

Back to article view | Back to comp.lang.python


Contents

  conditional running of code portion JW Huang <ngcbmy@gmail.com> - 2012-08-04 21:16 -0700
    Re: conditional running of code portion Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-08-05 06:30 +0000
      Re: conditional running of code portion Serhiy Storchaka <storchaka@gmail.com> - 2012-08-05 19:40 +0300
      Re: conditional running of code portion Dieter Maurer <dieter@handshake.de> - 2012-08-06 19:02 +0200
      Re: conditional running of code portion Serhiy Storchaka <storchaka@gmail.com> - 2012-08-06 23:59 +0300
    Re: conditional running of code portion "Steven W. Orr" <steveo@syslang.net> - 2012-08-05 22:50 -0400

#26524 — conditional running of code portion

FromJW Huang <ngcbmy@gmail.com>
Date2012-08-04 21:16 -0700
Subjectconditional running of code portion
Message-ID<0a61aed2-bd14-4022-bf59-a3bb3af55b3c@sn4g2000pbc.googlegroups.com>
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.

Thanks in advance.

[toc] | [next] | [standalone]


#26527

FromSteven D'Aprano <steve+comp.lang.python@pearwood.info>
Date2012-08-05 06:30 +0000
Message-ID<501e1319$0$29978$c3e8da3$5496439d@news.astraweb.com>
In reply to#26524
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)




-- 
Steven

[toc] | [prev] | [next] | [standalone]


#26539

FromSerhiy Storchaka <storchaka@gmail.com>
Date2012-08-05 19:40 +0300
Message-ID<mailman.2964.1344184861.4697.python-list@python.org>
In reply to#26527
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)

Or this:

if VERBOSE_FLAG:
     def do_work(item):
         print(DEBUG_INFORMATION)
         do_actual_work(item)
else:
     do_work = do_actual_work

for item in loop:
     do_work(item)

[toc] | [prev] | [next] | [standalone]


#26638

FromDieter Maurer <dieter@handshake.de>
Date2012-08-06 19:02 +0200
Message-ID<mailman.3019.1344272562.4697.python-list@python.org>
In reply to#26527
Serhiy Storchaka <storchaka@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)
>
> Or this:
>
> if VERBOSE_FLAG:
>     def do_work(item):
>         print(DEBUG_INFORMATION)
>         do_actual_work(item)
> else:
>     do_work = do_actual_work
>
> for item in loop:
>     do_work(item)

Be warned: a function call is *much* more expensive than an
"if variable:".

[toc] | [prev] | [next] | [standalone]


#26659

FromSerhiy Storchaka <storchaka@gmail.com>
Date2012-08-06 23:59 +0300
Message-ID<mailman.3032.1344286818.4697.python-list@python.org>
In reply to#26527
On 06.08.12 20:02, Dieter Maurer wrote:
> Serhiy Storchaka <storchaka@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)
>>
>> Or this:
>>
>> if VERBOSE_FLAG:
>>      def do_work(item):
>>          print(DEBUG_INFORMATION)
>>          do_actual_work(item)
>> else:
>>      do_work = do_actual_work
>>
>> for item in loop:
>>      do_work(item)
>
> Be warned: a function call is *much* more expensive than an
> "if variable:".

As any actual work. As iteration.

Yet one way:

def verbose_iter(it):
     for i in it:
         print(DEBUG_INFORMATION)
         yield i
...

if VERBOSE_FLAG:
     loop = verbose_iter(loop)
for item in loop:
     do_work(item)

[toc] | [prev] | [next] | [standalone]


#26603

From"Steven W. Orr" <steveo@syslang.net>
Date2012-08-05 22:50 -0400
Message-ID<mailman.2998.1344221413.4697.python-list@python.org>
In reply to#26524
On 8/5/2012 12:43 AM, Ramchandra Apte wrote:
> Try pypreprocessor <http://code.google.com/p/pypreprocessor/> .
> Better idea:
> You should be using the logging <http://docs.python.org/library/logging.html>
> module if you want to print debug information quickly.It uses threads and is
> optimized to run fast.

I never saw pypreprocessor. Looks interesting. I have experience with Ned's cog 
preprocessor.

http://nedbatchelder.com/code/cog/

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

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web