How to create an 'empty if statement' in python

后端 未结 4 940
别那么骄傲
别那么骄傲 2020-12-05 17:45

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

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

相关标签:
4条回答
  • 2020-12-05 17:56

    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.

    0 讨论(0)
  • 2020-12-05 17:56

    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.

    0 讨论(0)
  • 2020-12-05 18:04

    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.

    0 讨论(0)
  • 2020-12-05 18:19

    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)
    
    0 讨论(0)
提交回复
热议问题