Как создать "пустое выражение if" в python
Это очень распространено в C: взломать 'empty if statement' следующим образом:
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
Он работает в Python? Я имею в виду, можем ли мы улучшить производительность приложения, используя это? Я также хотел бы знать, почему.
Ответы
Ответ 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 в вашем коде.