2017-06-17 72 views
1

注意:這個問題的確已被許多其他語言回答。 但是,我找不到Python的答案,所以不要標記爲重複。三元運算符與if-else語句的性能(Python)

Python中的if-else語句和三元運算符之間的性能有差異嗎?

+2

只需使用任何一個你感覺使代碼更易讀。如果你曾經處於一個熱門循環中,那麼它可能會有所作爲,可以採用雙向代碼並在實際代碼的上下文中衡量性能。可能還有其他更重要的因素,例如您使用的算法。 –

回答

2

我懷疑是否有性能差異。他們編譯爲等效的字節碼序列:

>>> def f(): 
... return a if b else c 
... 
>>> dis.dis(f) 
    2   0 LOAD_GLOBAL    0 (b) 
       2 POP_JUMP_IF_FALSE  8 
       4 LOAD_GLOBAL    1 (a) 
       6 RETURN_VALUE 
     >> 8 LOAD_GLOBAL    2 (c) 
      10 RETURN_VALUE 
>>> def g(): 
... if b: 
...  return a 
... else: 
...  return c 
... 
>>> dis.dis(g) 
    2   0 LOAD_GLOBAL    0 (b) 
       2 POP_JUMP_IF_FALSE  8 

    3   4 LOAD_GLOBAL    1 (a) 
       6 RETURN_VALUE 

    5  >> 8 LOAD_GLOBAL    2 (c) 
      10 RETURN_VALUE 
      12 LOAD_CONST    0 (None) 
      14 RETURN_VALUE 

與大多數性能問題一樣,答案是衡量。

0

從Python 3.6.1的一些測試中,似乎完整的語句更快。

我的結果:

>>> timeit.timeit("""3 if True else 8""") 
0.012174860001323395 
>>> timeit.timeit("""3 if False else 8""") 
0.019092951000857283 
>>> timeit.timeit("""if True: 
...  3 
... else: 
...  8""") 
0.009110345999943092 
>>> timeit.timeit("""if False: 
...  3 
... else: 
...  8""") 
0.00877297099941643 
+1

我認爲這可能與'timeit'有關,試圖解析三重引用的評論。我定義了函數來用if-else語句和三元運算符來評估這種情況,對於100次重複都使用了'timeit.repeat',並且對於三元運算符得到了0.81秒的平均值(對於默認1,000,000次運行) ,if-else語句爲0.88秒。 –