標籤:body 代碼 nat rmi without and 列印 直接 immediate
假設有如下代碼:
for i in range(10): if i == 5: print ‘found it! i = %s‘ % ielse: print ‘not found it ...‘
你期望的結果是,當找到5時列印出:
found it! i = 5
實際上列印出來的結果為:
found it! i = 5not found it ...
顯然這不是我們期望的結果。
根據官方文檔說法:
>When the items are exhausted (which is immediately when the sequence is empty), the suite in the else clause, if present, is executed, and the loop terminates.>A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there was no next item.https://docs.python.org/2/reference/compound_stmts.html#the-for-statement
大意是說當迭代的對象迭代完並為空白時,位於else的子句將執行,而如果在for迴圈中含有break時則直接終止迴圈,並不會執行else子句。
所以正確的寫法應該為:
for i in range(10): if i == 5: print ‘found it! i = %s‘ % i breakelse: print ‘not found it ...‘
當使用pylint檢測代碼時會提示
Else clause on loop without a break statement (useless-else-on-loop)
所以養成使用pylint檢測代碼的習慣還是很有必要的,像這種邏輯錯誤不注意點還是很難發現的。
唔~
轉載自: https://www.cnblogs.com/dspace/p/6622799.html
Python中for迴圈搭配else的陷阱