1. 程式人生 > >python中的可迭代物件和迭代器(iter函式和next函式)

python中的可迭代物件和迭代器(iter函式和next函式)

  • iter函式: 獲取可迭代物件身上的迭代器, 會呼叫可迭代物件身上的iter的方法
  • next函式: 獲取迭代器中的下一個值,會呼叫迭代器物件身上的next的方法
from collections import Iterable
from collections import Iterator


class MyList(object):
    def __init__(self):
        # 準備一個列表資料
        self.my_list = [1, 4, 6]

    def __iter__(self):
        # 需要一個迭代器,可迭代物件的本質是通過迭代器幫我們把資料獲取出來的
my_iterator = MyIterator(self.my_list) result = isinstance(my_iterator, Iterator) print("my_iterator:", result) return my_iterator

自定義迭代器物件: 在類裡面提供一個iter和一個next的方法建立的物件就是迭代器物件

迭代器的作用: 記錄資料的位置,根據位置在資料物件中獲取對應的資料

class MyIterator(object):

    def __init__(self, my_list)
:
self.my_list = my_list # 記錄當前獲取資料的下標 self.index = 0 def __iter__(self): return self def __next__(self): # print("xxx") if self.index < len(self.my_list): value = self.my_list[self.index] self.index += 1 return
value else: # 如果迭代完成需要丟擲停止迭代的異常 raise StopIteration # 建立的是可迭代物件 my_list = MyList() # 獲取可迭代物件身上的迭代器 my_iterator = iter(my_list) print(my_iterator) # 根據迭代器獲取迭代器中的下一個值 # value = next(my_iterator) # print(value) # 提示: while迴圈不會自己不會停止迭代的異常,需要自己新增 # while True: # try: # value = next(my_iterator) # print(value) # except StopIteration: # break # 遍歷的是迭代器物件 for value in my_iterator: print(value)

總結: for迴圈的本質
1. 如果for迴圈遍歷的是可迭代物件,for迴圈內部會通過iter函式獲取可迭代物件的迭代器,然後通過next函式獲取迭代器中的下一個值
2. 如果for迴圈遍歷的是迭代器物件, for迴圈內部會通過next函式獲取迭代器中的下一個值
3. for迴圈內部自己捕獲了停止迭代的異常,程式設計師自己不需要程序捕獲異常的操作