これはCで非常に一般的です:次のように「空のifステートメント」をハッキングします。
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
Pythonで動作していますか?つまり、それを使用してアプリのパフォーマンスを向上させることはできますか?理由も知りたいです。
これはCで非常に一般的です:次のように「空のifステートメント」をハッキングします。
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
Pythonで動作していますか?つまり、それを使用してアプリのパフォーマンスを向上させることはできますか?理由も知りたいです。
バイトコードは実行を「if」ケースに渡さないため、「if」に else ケースがない場合、パフォーマンスが向上します。
ここにいくつかの関数と出力があります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)
pass
構文エラーを防ぐために空のコード ブロックを作成する必要があるステートメントを探しているとしか思えません。
if mostlyhappencondition:
pass
else:
do_something()
これを行う方がはるかに一般的であり、これは論理的に同等です。
if not mostlyhappencondition:
do_something()
ここでは、大幅なパフォーマンスの向上は見られません。
if True:
あなたにできることが何もない時まで
if not mostlyhappenedcondition:
do something()
今後も「if」に何も入れる必要がない場合は、コードが冗長になります。
いいえ、パフォーマンスは向上しません。実際、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秒かかりました。