注意:這個問題的確已被許多其他語言回答。 但是,我找不到Python的答案,所以不要標記爲重複。三元運算符與if-else語句的性能(Python)
Python中的if-else語句和三元運算符之間的性能有差異嗎?
注意:這個問題的確已被許多其他語言回答。 但是,我找不到Python的答案,所以不要標記爲重複。三元運算符與if-else語句的性能(Python)
Python中的if-else語句和三元運算符之間的性能有差異嗎?
我懷疑是否有性能差異。他們編譯爲等效的字節碼序列:
>>> 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
與大多數性能問題一樣,答案是衡量。
從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
我認爲這可能與'timeit'有關,試圖解析三重引用的評論。我定義了函數來用if-else語句和三元運算符來評估這種情況,對於100次重複都使用了'timeit.repeat',並且對於三元運算符得到了0.81秒的平均值(對於默認1,000,000次運行) ,if-else語句爲0.88秒。 –
只需使用任何一個你感覺使代碼更易讀。如果你曾經處於一個熱門循環中,那麼它可能會有所作爲,可以採用雙向代碼並在實際代碼的上下文中衡量性能。可能還有其他更重要的因素,例如您使用的算法。 –