可迭代對象的概念及其使用:
可迭代對象,即可以進行迭代操作的一類對象。
迭代是訪問集合元素的⼀種⽅式。迭代器是⼀個可以記住遍歷的位置的對象。迭代器對象從集合的第⼀個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。
迭代是對元素進行的一種遍歷,python語法
for element in Iterable:
判斷一個對象可迭代:
用isinstance(Object, Iterable)判斷一個對象是否是Iterable對象:
1 from collections import Iterable 2 # 使⽤isinstance() 函數檢測某個對象是否是⼀個可迭代的對象 3 4 # 列表是可迭代對象 5 result = isinstance([1,2], Iterable) 6 print(result) 7 8 # 元組是可迭代對象 9 result = isinstance((1,2), Iterable) 10 print(result) 11 12 # 字符串是可迭代對象 13 result = isinstance("hello", Iterable) 14 print(result) 15 16 # 字典是可迭代對象 17 result = isinstance({"a": 10, "b": 100}, Iterable) 18 print(result) 19 20 # 數字不是可迭代對象 21 result = isinstance(100, Iterable) 22 print(result)
可迭代對象是實現:
可迭代對象的本質是,構造對象的類中含有__iter__()方法,該方法返回一個可迭代對象。在python的內置語法中,執行可迭代對象的迭代操作都是調用__iter__()方法獲取一個可迭代對象,然后通過該對象的__next__()來獲取該對象的相關數據。
1 from collections.abc import Iterable 2 3 4 class MyList(object): 5 def __init__(self): 6 self.item = list() 7 8 def addItem(self, data): 9 self.item.append(data) 10 11 def __iter__(self): 12 print('調用MyList_iter方法') 13 mylist_iterator = MyListIterator(self.item) 14 return mylist_iterator 15 16 17 class MyListIterator(object): 18 def __init__(self, item): 19 self.item = item 20 self.current_index = 0 21 22 # def __iter__(self): 23 # pass 24 25 def __next__(self): 26 print('調用MyListIterator_next方法') 27 if self.current_index < len(self.item): 28 data1 = self.item[self.current_index] 29 self.current_index += 1 30 return data1 31 else: 32 raise StopIteration 33 34 35 if __name__ == '__main__': 36 mylist = MyList() 37 mylist.addItem("張三") 38 mylist.addItem("李四") 39 mylist.addItem("王五") 40 for value in mylist: 41 print(value) 42 result = isinstance(mylist, Iterable) 43 print(result)
輸出結果:
- 當調⽤iter(迭代器對象)時,會調⽤對象的 __iter__() ⽅法
- 當調⽤next(迭代器對象)時,會調⽤對象的 __next__() ⽅法
for...in...循環的實現過程:
for item in Iterable 循環的本質就是先通過iter()函數獲取可迭代對象Iterable的迭代器,然后對獲取到的迭代器不斷調⽤next()⽅法來獲取下⼀個值並將其賦值給item,當遇到StopIteration的異常后循環結束。
文件對象也是一個可迭代對象:
1 try: 2 with open('cal_time.py', 'r', encoding='utf-8') as f: 3 # print(f.read(1024)) 4 print(f) 5 for i in f: 6 print(i) 7 print('-------') 8 except Exception as e: 9 print(e)
輸出結果: