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 =
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基礎 迭代器
二 生成器 三 推導表示式 迭代器就是乙個容器,將可迭代物件通過iter包起來 li 1 2,3 4,5 a liter li 迭代器print next a 1print next a 2print next a 3 乙個個取值 1.訪問者不需要去關心內部結構,只需要通過next不斷去取下乙個內容...
Python基礎 迭代器
可以直接作用於for迴圈的資料型別有一下幾種 一類是集合資料型別 如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function 這些可以直接作用與for迴圈的物件統稱為可迭代物件 iterable 可以使用isinsta...
python基礎 迭代器
我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用...