2013-02-26 64 views
19

它在C很常見的:黑客「空if語句」這樣的:如何「空if語句」在Python

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

它的工作在Python?我的意思是,我們可以通過使用它來改進應用程序的性能嗎?我也想知道爲什麼。

+2

它在C中很常見?這看起來像是對我進行優化的錯誤嘗試。 – phant0m 2013-02-28 12:48:39

+0

我正在尋找類似的編碼策略。原因不是爲了優化,而是爲了更好的代碼可讀性。像使用'if if not some_thing,而不是some_thing_else:do_something',而不是使用'if something或something_else:pass else:do_something'來讀代碼。這裏的答案有幫助!謝謝。 – 2016-05-15 23:01:25

回答

25

如果在「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) 
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秒我的電腦上。

12

我只能猜測你正在尋找pass語句,有時需要創建一個空的代碼塊來防止語法錯誤。

if mostlyhappencondition: 
    pass 
else: 
    do_something() 

這將是更爲平常只是這樣做,這在邏輯上是等價的:

if not mostlyhappencondition: 
    do_something() 

有在這裏沒有發現顯著的性能提升。

3

直到你沒有在if True:任何事情的時候,你可以做

if not mostlyhappenedcondition: 
    do something() 

如果你沒有把任何東西,「如果」,甚至在未來,那麼它是在你的代碼redundunt。