• 7
name

A PHP Error was encountered

Severity: Notice

Message: Undefined index: userid

Filename: views/question.php

Line Number: 191

Backtrace:

File: /home/prodcxja/public_html/questions/application/views/question.php
Line: 191
Function: _error_handler

File: /home/prodcxja/public_html/questions/application/controllers/Questions.php
Line: 433
Function: view

File: /home/prodcxja/public_html/questions/index.php
Line: 315
Function: require_once

name Punditsdkoslkdosdkoskdo

How to create an 'empty if statement' in python

It's very common in C: hacking 'empty if statement' like this:

if(mostlyhappencondition)
    ;#empty statement
else{
    dosomething;
}

It's working in Python? I mean, can we improve the app's performance by using that? I'd also like to know why.

      • 2
    • I was looking for similar coding strategy. The reason is not for optimization but for better readability of the code. Like instead of using if not some_thing and not some_thing_else: do_something its better to read code as if something or something_else: pass else: do_something. The answers here helped! Thanks.

There is a performance improvement if there isn't an else case in the "if", since the bytecodes don't pass execution into the "if" case.

Here's some functions and the output of dis.dis(foo)

The following sample app:

def foo(x):
    if x:
        pass
    else:
        return x+2

Disassembles to:

5           0 LOAD_FAST                0 (x)
            3 POP_JUMP_IF_FALSE        9

6           6 JUMP_FORWARD             8 (to 17)

8     >>    9 LOAD_FAST                0 (x)
           12 LOAD_CONST               1 (2)
           15 BINARY_ADD          
           16 RETURN_VALUE        
      >>   17 LOAD_CONST               0 (None)
           20 RETURN_VALUE        

The following

def foo(x):
    if not x:
        return x+2

Disassembles to:

11           0 LOAD_FAST                0 (x)
             3 POP_JUMP_IF_TRUE        14

12           6 LOAD_FAST                0 (x)
             9 LOAD_CONST               1 (2)
            12 BINARY_ADD          
            13 RETURN_VALUE        
       >>   14 LOAD_CONST               0 (None)
  • 42
Reply Report

I can only guess you're looking for the pass statement, sometimes needed to create an empty code block to prevent a syntax error.

if mostlyhappencondition:
    pass
else:
    do_something()

It would be much more usual to just do this, which is logically equivalent:

if not mostlyhappencondition:
    do_something()

There are no significant performance gains to be found here.

  • 16
Reply Report

No, that won’t improve performance. In fact, it doesn’t in C, either. Where did you hear that?

not/! reads better and should have more or less the same speed.


And actually tested with gcc -O4:

#include <stdio.h>

int main(int argc, char *argv[]) {
    for(int i = 0; i < 1000000000; i++) {
        if(!(i < 900000000)) {
            putchar('.');
        }
    }
}

vs.

#include <stdio.h>

int main(int argc, char *argv[]) {
    for(int i = 0; i < 1000000000; i++) {
        if(i < 900000000);
        else {
            putchar('.');
        }
    }
}

#1 took 6.62 seconds and #2 took 6.64 seconds on my computer.

  • 3
Reply Report

Till the time you dont have any thing in if True: you could do

if not mostlyhappenedcondition:
   do something()

If you dont have to put any thing in "if" even in future, then it is redundunt in your code.

  • 3
Reply Report

Trending Tags