它在C很常見的:黑客「空if語句」這樣的:如何「空if語句」在Python
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
它的工作在Python?我的意思是,我們可以通過使用它來改進應用程序的性能嗎?我也想知道爲什麼。
它在C很常見的:黑客「空if語句」這樣的:如何「空if語句」在Python
if(mostlyhappencondition)
;#empty statement
else{
dosomething;
}
它的工作在Python?我的意思是,我們可以通過使用它來改進應用程序的性能嗎?我也想知道爲什麼。
如果在「if」中沒有其他情況,性能會提高,因爲字節碼不會將執行傳遞給「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)
不,這不會提高性能。事實上,它也不在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秒我的電腦上。
我只能猜測你正在尋找pass
語句,有時需要創建一個空的代碼塊來防止語法錯誤。
if mostlyhappencondition:
pass
else:
do_something()
這將是更爲平常只是這樣做,這在邏輯上是等價的:
if not mostlyhappencondition:
do_something()
有在這裏沒有發現顯著的性能提升。
直到你沒有在if True:
任何事情的時候,你可以做
if not mostlyhappenedcondition:
do something()
如果你沒有把任何東西,「如果」,甚至在未來,那麼它是在你的代碼redundunt。
它在C中很常見?這看起來像是對我進行優化的錯誤嘗試。 – phant0m 2013-02-28 12:48:39
我正在尋找類似的編碼策略。原因不是爲了優化,而是爲了更好的代碼可讀性。像使用'if if not some_thing,而不是some_thing_else:do_something',而不是使用'if something或something_else:pass else:do_something'來讀代碼。這裏的答案有幫助!謝謝。 – 2016-05-15 23:01:25