標籤:檢查 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迴圈工作原理》