我遇到了一個與我的Python代碼有關的問題,但這是我在其他語言中遇到的情況,我想要一個普通答案。在循環中優化條件語句/如何擺脫重複代碼
假設我有一個包含許多語句的循環。其中一個陳述取決於在迭代中不會改變的條件。我看到兩種方式來實現這一點:
for ... :
... #many statements
if conditionA :
statementA
elif conditionB :
statementB
else
statementC
或:
if conditionA :
for ... :
... #many statements
statementA
elif conditionB :
for ... :
... #many statements
statementB
else :
for ... :
... #many statements
statementC
在第一解決方案,問題是,我們在每次迭代,這是沒有必要的測試一些。第二種解決方案有更好的速度,因爲它只是一次測試條件,然後相應地啓動循環,這正是我想要做的;但現在有很多代碼重複(每次都重寫許多語句...)。
有沒有第三種方式,我沒有想到這將是第二個,但沒有代碼重複效率?謝謝!
編輯:
我在一個類似的主題(Optimizing a Loop vs Code Duplication)是C++編譯器已經做了優化(通過將第一個版本到編譯過程中第二個)讀取。解釋性語言如Python如何?
是你的條件顯著繁重去測試?如果是這樣,你可以將它們的結果賦值給變量,以避免在循環中反覆測試它們。 – khelwood
你不能在循環之前計算'conditionA'和'conditionB'的值嗎? –
除非您的條件不是O(1),否則時間複雜度*是相同的,無論循環是在條件內還是在其他方式內。很可能你只是爲了「速度」而濫用它。 – spectras