29.Python三大器(2)----迭代器

一.初識迭代器

1.認識迭代

迭代是一個重複的過程,每次重複都是基於上次的結果,單純的重複不叫迭代

單純的重複:
while 1:
	print(1)

迭代:
count = 1
while count <= 5:
	print(count)
	count += 1
	

2.可迭代對象與迭代器對象

1.可迭代對象
可迭代對象:擁有__iter__方法的對象稱爲可迭代對象
可迭代對象調用__iter__會返回一個迭代器對象

2.迭代器對象
迭代器對象:擁有__iter__和__next__方法的對象成爲迭代器對象,迭代器對象也是可迭代對象
迭代器的__next__方法可以取到迭代器的下一個值,如果沒有則會報錯
迭代器的__iter__方法返回它本身(並不是雞肋,爲了統一for循環的工作機制)

示例代碼1:

lst = [1,2,3]
print(lst.__iter__)			結果爲:<method-wrapper '__iter__' of list object at 0x000002988FB59D08>

示例代碼2:

lst = [1,2,3]
item = lst.__iter__()		結果爲:1
print(item.__next__())		結果爲:2
print(item.__next__())		結果爲:3
print(item.__next__())		結果爲:報錯StopIteration:

示例代碼3:

lst = [1,2,3]
item1 = lst.__iter__()
item2 = item1.__iter__()
print(item1 is item2)		結果爲:True

3.爲什麼要有迭代器?

for循環的原理就是迭代器,這裏我們假設不知道for循環
此時,我們如果要對可迭代對象進行迭代取值,代碼應該如下:

lst = [1,2,3]
count = 0
while count < len(lst):
	print(lst[count])
	count += 1

結果爲:
1
2
3

但是這個方法有一個弊端,就是隻適用於有索引的可迭代對象,對於字典和集合是不管用的,所以python爲我們提供了迭代器,我們可以不依靠索引就能對可迭代對象進行迭代取值

dic = {"a":1,"b":2,"c":3}

item = dic.__iter__()
while 1:
    try:
        key = item.__next__()
        print(key,dic[key])
    except StopIteration:
        break
結果爲:
a 1
b 2
c 3

二.for循環的原理

for i in k:
	print(i)

以這段代碼爲例:
	1.執行k.__iter__(),拿到一個迭代器對象
	2.調用迭代器對象的__next__方法,獲取到迭代器對象中的一個值
	3.重複步驟2,並進行異常捕獲,如果捕獲到異常StopIteration則退出循環

代碼實現:
item = xxx.__iter__()
while 1:
    try:
        item.__next__()
    except StopIteration:
        break

三.迭代器優缺點

優點:

  1. 可以不依靠索引完成對可迭代對象的迭代取值
  2. 節省內存,因爲__next__方法的存在,執行一次纔會生成一個值。

缺點:

  1. 不能精準的取值,通過索引取值我們可以準確的取到第幾個元素,但是使用迭代器不可以
  2. 生命週期短,當迭代器內的值取完後,迭代器就"死"了,如果還想使用,必須得再實例化一個迭代器對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章