可迭代對象
-
字面意思:對象?Python中一切皆對象,一個實實在在的值,對象。
-
可迭代:更新迭代,重複的,循環的一個過程,更新迭代每次都有新的內容,可以進行循環更新的一個實實在在的值
-
專業的角度:內部含有’iter’方法的對象,可迭代對象。
例如:str list tuple dict set range 文件句柄 -
獲取對象的所有方法且以字符串的形式表現:dir()
-
判斷一個對象是否是可迭代對象:
s1 = 'fsjef'
print('__iter__'in dir(s1))
####
True
優點:
- 1、存儲的數據直接顯示,比較直觀
- 2、擁有的方法比較多,操作方便
缺點: - 1、佔用內存
- 2、不能直接通過for 循環,不能直接取值(索引,key)
迭代器
-
字面意思:更新迭代 、器 :工具:可更細迭代的工具
-
專業角度:內部含有’iter’方法並且含有’next’方法的對象就是迭代器
-
可以判斷是否是迭代器:'iter’and’next’在不在dir(對象)
-
判斷一個對象是否是迭代器
with open('文件1',encoding='utf-8',mode='w') as f1:
print(('__iter__' in dir(f1)) and ('__next__' in dir(f1)))
True
- 迭代器的取值
s1 = 'fsafef'
obj = iter(s1)
print(next(obj)) #每運行一次next取一次值,並且會記住上一次的取值
print(next(obj))
#####
f
s
-
可迭代對象如何轉化爲迭代器
iter([1,2,3]) -
while循環模擬for循環機制
l1 = [11,22,33,44,55,66,77,88]
#將可迭代對象轉化成迭代器
obj = iter(l1)
while 1:
try:
print(next(obj))
except StopIteration:
break
###
11
22
33
44
55
66
77
88
Process finished with exit code 0
優點:
- 1、節省內存
- 2、惰性機制,next一次,取一次值。
缺點: - 速度慢
- 不走回頭路
可迭代對象與迭代器的對比
- 可迭代對象是一個操作方法比較多,比較直觀,存儲數據相對少(幾百萬對象8G內存是可以承受的)的一個數據集
- 當你側重於對數據可以靈活處理,並且內存空間足夠,將數據集設置爲可迭代對象是明確的選擇
- 迭代器是也非常節省內存,可以記錄取值位置,可以直接通過循環+next方法取值,但是不直觀,操作方法比較單一的數據集
- 當你的數據量過大,達到足矣撐爆你的內存或者你以節約內存爲首選因素時,將數據集設置爲迭代器是一個不錯的選擇
對比
#可迭代對象
l1 = [11,22,33,44,55,66,77,88]
for i in range(3):
print(l1[i])
for i in range(5):
print(l1[i])
####打印結果
11
22
33
11
22
33
44
55
Process finished with exit code 0
#迭代器
l1 = [11,22,33,44,55,66,77,88]
obj = iter(l1)
for i in range(3):
print(next(obj))
for i in range(5):
print(next(obj))
###打印結果
11
22
33
44
55
66
77
88
Process finished with exit code 0