《Python學習之路 -- Python基礎之迭代器及for迴圈工作原理》

來源:互聯網
上載者:User

標籤:檢查   nbsp   必須   為什麼   com   字元   for 迴圈   資料類型   學習   

  提到迭代器不得不說迭代器協議,迭代器協議是指:對象必須提供一個__next__()方法,執行該方法要麼返回迭代中的下一項,要麼就拋出一個StopIteration異常(相當於報錯的意思)以終止迭代。然而遵循這個協議的對象就稱為可迭代對象,又稱為迭代器。在Python中,for迴圈操作的對象就是可迭代對象。說到這裡可能會引起一些誤會,原因就是我們都知道for迴圈可以直接遍曆列表、元組或字串等等集合,但是這些資料類型並沒有上面提到的__next__()方法,也就是說這些資料類型根本就不遵循迭代器協議,也就意味著列表、元組、字串或字典等都不是可迭代對象,那麼for迴圈究竟是如何工作的呢?

  首先,驗證剛剛說的列表或字串等等都不是可迭代對象:

那麼問題來了,為什麼說 for 迴圈操作的是可迭代對象,然而這些資料類型又不是可迭代對象,那為什麼 for 迴圈能夠操作他們呢?下面就來介紹 for 迴圈的工作原理:

其實,for 迴圈在處理這些資料前,會調用 __iter__() 方法,將這些資料轉化為一個可迭代對象,然後調用可迭代對象的 __next__() 方法,並捕獲StopIteration異常,也就實現了遍曆完所有資料就會結束,並不會拋出這個異常。

# 利用while迴圈類比for迴圈num_list = [1,2,3,4]# 先調用資料的__iter__()方法,產生一個可迭代對象list_iterable = num_list.__iter__()# 檢查可迭代對象的類型,返回 <class ‘list_iterator‘>  列表迭代器print(type(list_iterable))# 調用可迭代對象的__next__()方法實現遍曆,並捕獲StopIteration異常while True:    try:        print(list_iterable.__next__())  # 遍曆列表中的所有元素  --- 1  2  3  4    except StopIteration:        break

 

《Python學習之路 -- Python基礎之迭代器及for迴圈工作原理》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.