4.5.1 可迭代物件
**字面意思分析**:可以重複的迭代的實實在在的東西。
list,dict(keys(),values(),items()),tuple,str,set,range, 檔案控制代碼(待定)
**專業角度**: **內部含有`__iter__`方法的物件,就是可迭代物件。**
**內建函式**:dir() print(dir(str))
判斷乙個物件是否是可迭代物件有以下兩種方式:
#方法一
print('__iter__' in dir(list)) #輸出true
#方法二
from collections import iterable
l = [1,2,3,4]
s = 'asdf'
print(isinstance(l,iterable))
print(isinstance(s,iterable)) #輸出true
優點:直觀;操作方法多;
缺點:占用記憶體;除去索引和字典的key,不能迭代取值
4.5.2 迭代器iterator
字面意思:可重複迭代的工具
專業角度:含有__int__
和__next__
方法的物件就是迭代器
使用.__iter__()
和iter()
可以將可迭代物件轉換成迭代器
#方法一:
s = 'asasasa'
a = iter(s)
s = 'asasasa'
a = iter(s)
item = a.__next__()
print(item)
item = a.__next__()
print(item)
item = a.__next__()
print(item)
item = a.__next__()
print(item)
#方法二:
l = [1,2,3,4]
l_iter = l.__iter__() #將可迭代物件轉換成迭代器
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
item = l_iter.__next__()
print(item)
迭代器遵循迭代器協議:必須擁有__iter__方法和__next__方法。
for迴圈,能遍歷乙個可迭代物件,他的內部到底進行了什麼?
利用while迴圈,模擬for迴圈內部迴圈可迭代物件的機制。
先要將可迭代物件轉化成迭代器。
利用next對迭代器進行取值。
利用異常處理try一下防止報錯。
l = [1,2,3,4,5,6]
count = 0
ite = iter(l)
while 1:
try : #try是乙個問題處理機制,配合except返回的錯誤來終止迴圈
print(next(ite))
except stopiteration:
break
for迴圈就是基於迭代器協議提供了乙個統一的可以遍歷所有物件的方法,即在遍歷之前,先呼叫物件的__iter__方
法將其轉換成乙個迭代器,然後使用迭代器協議去實現迴圈訪問,最重要的一點,轉化成迭代器,在迴圈時,同一時
刻在記憶體中只出現一條資料,極大限度的節省了記憶體。
迭代器的優點:
·非常節省記憶體
·惰性機制
迭代器的缺點:
·不直觀
·操作不靈活
·效率相對低
python學習之迭代器
在介紹迭代器時候,首選介紹兩個概念,from collections.abc import iterable from collections.abc import iterator print isinstance iterable print isinstance iterable print ...
python之迭代器
可迭代物件就是序列觀念的通用化,如果物件是實際儲存的序列,或者可以在迭代工具環境 eg for迴圈 中一次產生乙個結果的物件,就可看成是可迭代的。可迭代物件包括實際序列和按照需求而計算的虛擬序列。常見的迭代工具 for迴圈 列表解析 in成員關係測試以及map內建函式等。1.檔案迭代器 readli...
Python之迭代器
我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable。可以使用...