How to create an 'empty if statement' in python

Question:

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.

Asked By: JJP

||

Answers:

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.

Answered By: Ry-

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.

Answered By: wim

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.

Answered By: Kaunteya

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)
Answered By: koblas
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.