python_可迭代對象與迭代器

可迭代對象

  • 字面意思:對象?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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章