python基礎-叠代器
1.什麽是叠代器:
叠代:是一個重復的過程,每一次重復即是一次叠代,並且每次叠代的結果都是下一次叠代的初始值。
2.為什麽要有叠代器?
對於序列類型:字符串、列表、元組,我們可以使用索引的方式叠代取出其包含的元素。但對於字典、集合、文件等類型是沒有索引的,若還想取出其內部包含的元素,則必須找出一種不依賴於索引的叠代方式,這就是叠代器.
3.什麽是可叠代對象?
可叠代對象指的是內置有__iter__方法對象,即obj.__iter__,如下
4.什麽是叠代器對象?
可叠代對象執行__iter__()得到的結果就是叠代器對象
而叠代器對象指的是既有 __iter__()又有內置__next()方法的對象
文件類型是叠代器對象:
字符串,列表,元祖,字典,集合都是可叠代對象,但不是叠代器對象
文件對象既是可叠代對象,又是叠代器對象
5.叠代器對象的使用
字符串,列表,元祖,字典,集合等可叠代對象通過__iter__()得到叠代器對象
叠代器對象通過__iter__()得到仍是叠代器對象本身
__next__()取值不依賴索引
next()函數和__next__的區別:
next()和__next__都是可以獲得下一個值:
PS:Python 3 中的 文件 對象不支持 next() 方法。 Python 3 的內置函數 next() 通過叠代器調用 __next__() 方法返回下一項。 在循環中,next()方法會在每次循環中調用,該方法返回文件的下一行,如果到達結尾(EOF),則觸發 StopIteration
ps:for循環取值的工作原理:
dic = {‘name‘: ‘zhangsan‘, ‘age‘: 12}
for key in dic:
print(dic(key))
1.執行in後對象的dic.__iter__()方法,得到叠代器對象iter_dic
2.執行next(iter_dic).將得到的值賦值給key,然後執行循環體代碼
3.重復過程2,直到捕捉異常StopIteration,結束循環
for。。in的工作原理:
叠代器的優缺點:
優點:提供一種統一的、不依賴於索引的叠代方法
惰性計算,節省內存
確定:
無法直接獲得長度大小,只有在next完畢後才知道
一次性的,只能往後走,並不能往前退、
python基礎-叠代器