python3迭代器是什么,python3 迭代器
1. 想要了解 迭代器 ,需要先 知道什么是 可迭代對象。
簡單點說,可以直接作用于for循環的對象,稱之為可迭代對象(Iterable)。
1.png
可迭代對象,一定實現了__iter__方法。isinstance內建函數,可以判斷一個對象是否是某個類的實例對象。通過運行代碼我們可以看到,返回了True. 表示 it 這個對象是一個可迭代對象。
__iter__ 這個方法只有返回一個特殊的對象才有實際的意義。(這個特殊對象,可以調用next方法,不斷返回一個值,沒有值的時候拋出StopIteration異常),這里所說的特殊對象,就是迭代器(Iterator)。
iter函數的作用:調用 參數對象的 __iter__方法 返回一個 迭代器對象(Iterator)。
2. 迭代器(Iterator)
簡單點說,可以調用__next__方法,不斷返回一個值的對象稱之為迭代器.
迭代器要求必須有__iter__方法和__next__方法。換句話說,也就是,如果你想自己定義一個迭代器,那么你必須定義__iter__方法和__next__方法。
自定義 迭代器:
from collections import Iterable, Iterator
class test(object):
def __init__(self, b):
self.a = 0
self.b = b
def __iter__(self):
return self
def __next__(self):
if self.a < self.b:
i = self.a
self.a += 1
return i
else:
raise StopIteration()
it = test(10)
print(isinstance(it, Iterable))
print(isinstance(it, Iterator))
# next(it) # 實際上 調用 it 對象的 __next__ 方法。
for temp1 in it:
print(temp1)
for temp2 in it:
print(temp2)
可見:迭代器 一定是 可迭代對象。列表、元組、字符串、字典、集合 這些雖然是 可迭代對象,但是不是 迭代器。iter() 函數可以很方便的把他們轉換為迭代器。
for循環的工作原理:調用iter()函數,獲取一個迭代器對象,然后迭代器調用__next__()方法不斷返回一個值,直到遇到StopIteration這個異常 ,停止循環。
注意:迭代器 在 返回所有值之后,就空了,沒有了。it這個對象,就好比是一個盛滿水的水壺,調用__next__方法相當于 倒水,水倒完了,水壺自然就空了
迭代器是一次性的,只能作用于一次for循環,當然 這不是絕對的,可以 自己修改成 無限次。如何修改呢?
只需要在 __iter__ 方法中 加上 self.a = 0 這行代碼即可。
總結
以上是生活随笔為你收集整理的python3迭代器是什么,python3 迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang 切片 接口_如何理解Gol
- 下一篇: huffman算法c语言实验报告,huf