python中的可迭代物件和迭代器(iter函式和next函式)
阿新 • • 發佈:2018-12-03
- 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迴圈內部自己捕獲了停止迭代的異常,程式設計師自己不需要程序捕獲異常的操作