本文實例講述了Python通過for循環理解迭代器和生成器。分享給大家供大家參考,具體如下:
迭代器
可迭代對象
通過 for…in… 循環依次拿到數據進行使用的過程稱為遍歷,也叫迭代。我們把可以通過 for…in… 語句迭代讀取數據的對象稱之為可迭代對象。
- 通過
isinstance()可以判斷一個對象是否可以迭代
# 判斷列表print(isinstance([], Iterable)
打印結果為 True 即為可迭代對象。
- 自定義一個能容納數據的類,測試該類的可迭代性
import collectionsclass MyClassmate(object): def __init__(self): self.names = [] def add(self, name): self.names.append(name)# 創建 MyClassmate對象my_classmate = MyClassmate()my_classmate.add("小王")my_classmate.add("小李")my_classmate.add("小張")# 判斷MyClassmate是否為可迭代對象print("是否為可迭代對象:",isinstance(my_classmate, collections.Iterable))# 迭代數據for temp in my_classmate: print(temp)運行結果:
是否為可迭代對象: False
Traceback (most recent call last):
for temp in my_classmate:
TypeError: 'MyClassmate' object is not iterable
封裝一個可以存放多條數據的類型是不可迭代的
何為可迭代對象
我們分析對可迭代對象進行迭代使用的過程,發現每迭代一次(即在 for…in… 中每循環一次)都會返回對象中的下一條數據,一直向后讀取數據直到迭代了所有數據后結束。那么,在這個過程中就應該有一個"人"去記錄每次訪問到了第幾條數據,以便每次迭代都可以返回下一條數據。我們把這個能幫助我們進行數據迭代的"人"稱為迭代器 (Iterator)。 可迭代對象的本質就是提供一個這樣的中間"人"即迭代器幫助我們對其進行迭代遍歷使用。 可迭代對象通過__iter__方法向我們提供一個迭代器,在迭代一個可迭代對象的時候,實際上就是先獲取該對象提供的一個迭代器,然后通過這個迭代器來依次獲取對象中的每一個數據.1.可迭代對象的本質就是提供一個這樣的中間"人"即迭代器幫助我們對其進行迭代遍歷使用
2.可迭代對象是一個具備了
__iter__方法的對象,通過__iter__方法獲取可迭代對象的迭代器
from collections import Iterableclass MyClassmate(object): def __init__(self): self.names = [] def add(self, name): self.names.append(item) def __iter__(self): """空實現該方法""" return None# 創建 MyClassmate對象my_classmate = MyClassmate()my_classmate.add("小王")my_classmate.add("小李")my_classmate.add("小張")# 判斷MyClassmate是否為可迭代對象print(isinstance(my_classmate, Iterable))
新聞熱點
疑難解答