Подтвердить что ты не робот

Как создать "пустое выражение if" в python

Это очень распространено в C: взломать 'empty if statement' следующим образом:

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

Он работает в Python? Я имею в виду, можем ли мы улучшить производительность приложения, используя это? Я также хотел бы знать, почему.

4b9b3361

Ответ 1

Существует улучшение производительности, если в "if" нет случая else, поскольку байт-коды не передают исполнение в случай "if".

Здесь некоторые функции и вывод dis.dis(foo)

Следующее примерное приложение:

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

Разборки:

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        

Следующие

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

Разборки:

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)

Ответ 2

Я могу только догадываться, что вы ищете инструкцию pass, иногда необходимо создать пустой блок кода, чтобы предотвратить синтаксическую ошибку.

if mostlyhappencondition:
    pass
else:
    do_something()

Было бы гораздо обычнее просто сделать это, что логически эквивалентно:

if not mostlyhappencondition:
    do_something()

Здесь нет существенных выигрышей в производительности.

Ответ 3

Нет, это не улучшит производительность. На самом деле, это тоже не в C. Где вы это слышали?

not/! читает лучше и должен иметь более или менее ту же скорость.


И на самом деле протестирован с помощью gcc -O4:

#include <stdio.h>

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

против.

#include <stdio.h>

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

# 1 заняло 6,62 секунды, а # 2 заняло 6,64 секунды на моем компьютере.

Ответ 4

До тех пор, пока у вас не будет ничего в if True:, вы могли бы сделать

if not mostlyhappenedcondition:
   do something()

Если вам не нужно вносить какие-либо вещи в "if" даже в будущем, тогда это будет redundunt в вашем коде.