python中,條件判斷過多是否會影響程序的運行速度?

最近在寫一個爬蟲,中間有很多函數中有大量的條件判斷的語句,類似:

if value == "A":
#code
if value == "B":
#function
......

這樣是不是會對代碼運行時效率造成影響?

Python中有哪些比較好的方法解決條件判斷過多辦法,或者說代替大量if判斷的方法?


自然是會的,判斷都要進行計算。如果分支實在太多,有一種方法是把值和對應的操作存在dict裡面,比如說:

if a == 1:
return 12
elif a == 2:
return 23
else:
return 19

可以改寫為:

map = {1:12, 2:23}
return map.get(a, 19)

當分支很少的時候可能反而會變慢,因為dict的操作常數比較大,但是這樣有幾個好處,首先分支非常多的時候會更快,而且把hardcode的分支改成了數據結構,就可以動態添加、刪除,可以很容易將硬分支改成OOP控制的可擴展的結構。最終還是看你的需求的。


影響歸影響,記得算時間複雜度。畢竟python的簡單判斷你能每秒跑10^6~10^7次,因此不是那麼重要。

不如說如果條件太長條,那麼看代碼會顯得很啰嗦……

相比之下,決策樹和決策表都會略微增加複雜度,但是能讓代碼看起來更清晰也更通用。

以及可以用dict來模擬模式匹配,能稍微好看一些。


推薦你看一本書

第18章,講的就是這種優化。

Table-Driven Methods

Python 用字典來優化if 多路判斷。


應該是會的,看上面有說用字典優化的,感覺就像我用matlab使用太多for和if影響效率可以用矩陣來優化一樣


If statement is evil.

Explanations:

http://stackoverflow.com/questions/1554180/why-is-the-if-statement-considered-evil

還有個 ANTI-IF COMPAIgN;

http://antiifcampaign.com

手機上作答,好像沒法改格式吧…


會的,編譯原理方面的書,應該會講到


推薦閱讀:

深度學習入門:投身深度學習你需要哪些準備?
Golang 學習筆記一
備忘131228
極光日報 第 207-208 期 | 2017 / 7 / 5 - 6

TAG:Python | 編程 | Python開發 | 運行速度 |