Python Every Day, 第 4 天
迭代器的好處: 迭代器和列表的作用相似,但是列表隨著元素個(gè)數(shù)的增加,所占用的空間也會(huì)增加。而迭代器的本質(zhì)是一個(gè)對(duì)象,并不像列表那樣通過索引獲取元素,充分的節(jié)省了內(nèi)存。
迭代對(duì)象: 在Python中,操作列表、字典、字符串等可以通過for ... in ... 的方式去獲取對(duì)象中的元素,這個(gè)過程稱為遍歷,也叫做迭代。這些對(duì)象稱為可迭代對(duì)象。 這些對(duì)象都有一個(gè) __iter__()方法,這個(gè)方法提供了一個(gè)迭代器。迭代器又會(huì)實(shí)現(xiàn)了__next__()方法。通過此方法可以去訪問迭代對(duì)象中的元素。從第一個(gè)開始,順序訪問,直到訪問到最后一個(gè)元素。會(huì)拋出StopInteration異常。
迭代器 和 迭代對(duì)象 的區(qū)別: 1)可迭代對(duì)象包含迭代器。 2)如果一個(gè)對(duì)象擁有__iter__方法,其是可迭代對(duì)象;如果一個(gè)對(duì)象擁有next方法,其是迭代器。 3)定義可迭代對(duì)象,必須實(shí)現(xiàn)__iter__方法;定義迭代器,必須實(shí)現(xiàn)__iter__和next方法。 總結(jié):含有 __iter__() 【必須】和 __next__() 方法的就是迭代器。 有 __iter__() 方法代表可以使用for循環(huán) 有__next()__ 方法 可以通過next() 方法去獲取迭代器中的元素 代碼示例: a = [1, 3, 5] print(type(a)) # <class 'list'> from collections import Iterable # 創(chuàng)建一個(gè)a的迭代對(duì)象 a_iter = iter(a) print(type(a_iter)) # <class 'list_iterator'>
print(a_iter.__next__()) # 1 print(a_iter.__next__()) # 3 print(a_iter.__next__()) # 5 print(a_iter.__next__()) # 迭代到最后一個(gè)元素時(shí),會(huì)拋出StopIteration異常
# 使用for in 來遍歷一個(gè)迭代對(duì)象 for i in a_iter: print(i)
# 遍歷try except break while 1: try: print(a_iter.__next__()) except StopIteration: print('結(jié)束....') break
通過Iterator判斷是否是迭代對(duì)象。
from collections import Iterable # 判斷列表是否是可迭代對(duì)象 print(isinstance([], Iterable)) # True # 判斷字典是否是可迭代對(duì)象 print(isinstance({}, Iterable)) # True # 判斷字符串是否是迭代對(duì)象 print(isinstance('Hello', Iterable)) # True
感謝您的閱讀
|