Python中for迴圈搭配else的陷阱

來源:互聯網
上載者:User

標籤: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的陷阱

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.