1. 程式人生 > 其它 >python筆記:迭代器用法

python筆記:迭代器用法

迭代器、迭代的工具

什麼是迭代:指的是一個重複的過程,每一次重複稱為一次迭代,並且每一次重複的結果是下一次重複的初始值

while True:
    print('hello world')

上面這種方式只有重複,結果並不是下一次的初始,所以不是迭代

例:不用for迴圈,用while迴圈將下邊幾種資料型別逐個取出

字串:s = 'helloworld'

列表:l = ['a','b','c','d','e']

元組:t = ('a','b','c','d','e')

字典:dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}

集合:set1 = {'a','b','c','d','e'}

檔案:f = open('a.txt', 'w', encoding='utf-8')

整數:12345(不能迭代)

1 = 0
while 1 < len(set1):
    print(set1[i])
    i += 1

如果經過上邊的迴圈進行測試會發現:

對於序列型別的字串,列表,元組可以依賴於索引來迭代取值,

但是字典,集合,檔案卻不行,所以,python必須為我們提供一種不依賴於索引取值的方法,就是迭代器

可迭代物件

判斷是否是可迭代物件

可以在pycharm軟體中試驗,如果有"xx.__iter__"這種用法那麼就是能變成可迭代物件

"xx.__iter__"就是把一個物件變成可迭代物件

"xx.__iter__"可以簡寫成"iter(xx)"

迭代器物件

"xx.__iter__""xx__next__"這兩種方法的就是迭代器物件

print(f is f.__iter__())  #f是上邊的檔案型別


執行結果:
由此看出,檔案型別本身就是可迭代物件
next方式取值
dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
d_items = dict1.__iter__()
res = d_items.__next__()
res1 = d_items.__next__()
res2 = d_items.__next__()
print(res)

可以調取 res,res1,res2,分別是三個key然後就可以根據key的來調取值了,"xx.__next__()"可以簡寫成"next()"

但是它每取一個值要多一條程式碼,只能一個一個取,迭代器優點:同一時間在記憶體裡只有一個值,節省記憶體空間

若想一起取,所以我們要採用while方式

dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
d_items = dict1.__iter__()
while True:
    res = d_items.__next__()
    print(res)

因為系統會停止迭代報錯

異常處理:try....except +錯誤

dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
d_items = dict1.__iter__()
while True:
  try:
    res = d_items.__next__()
    print(res)
  except StopIteration:
    break


執行結果:
,這樣就可以取值了,

過以上的步驟,我們知道了取值的原理及過程,這個原理同樣也是for迴圈的原理
dict1 = {'name' : 'aaa', 'age' : 18, 'job' : 'IT'}
for i in dict1:     #相當於dict1.__iter__(),即變成可迭代物件
    print(i)
執行結果:

總結

可迭代物件不一定是迭代器物件

迭代器物件一定是可迭代物件