python3迭代器是什么,python3 迭代器
1. 想要了解 迭代器 ,需要先 知道什么是 可迭代對(duì)象。
簡(jiǎn)單點(diǎn)說,可以直接作用于for循環(huán)的對(duì)象,稱之為可迭代對(duì)象(Iterable)。
1.png
可迭代對(duì)象,一定實(shí)現(xiàn)了__iter__方法。isinstance內(nèi)建函數(shù),可以判斷一個(gè)對(duì)象是否是某個(gè)類的實(shí)例對(duì)象。通過運(yùn)行代碼我們可以看到,返回了True. 表示 it 這個(gè)對(duì)象是一個(gè)可迭代對(duì)象。
__iter__ 這個(gè)方法只有返回一個(gè)特殊的對(duì)象才有實(shí)際的意義。(這個(gè)特殊對(duì)象,可以調(diào)用next方法,不斷返回一個(gè)值,沒有值的時(shí)候拋出StopIteration異常),這里所說的特殊對(duì)象,就是迭代器(Iterator)。
iter函數(shù)的作用:調(diào)用 參數(shù)對(duì)象的 __iter__方法 返回一個(gè) 迭代器對(duì)象(Iterator)。
2. 迭代器(Iterator)
簡(jiǎn)單點(diǎn)說,可以調(diào)用__next__方法,不斷返回一個(gè)值的對(duì)象稱之為迭代器.
迭代器要求必須有__iter__方法和__next__方法。換句話說,也就是,如果你想自己定義一個(gè)迭代器,那么你必須定義__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) # 實(shí)際上 調(diào)用 it 對(duì)象的 __next__ 方法。
for temp1 in it:
print(temp1)
for temp2 in it:
print(temp2)
可見:迭代器 一定是 可迭代對(duì)象。列表、元組、字符串、字典、集合 這些雖然是 可迭代對(duì)象,但是不是 迭代器。iter() 函數(shù)可以很方便的把他們轉(zhuǎn)換為迭代器。
for循環(huán)的工作原理:調(diào)用iter()函數(shù),獲取一個(gè)迭代器對(duì)象,然后迭代器調(diào)用__next__()方法不斷返回一個(gè)值,直到遇到StopIteration這個(gè)異常 ,停止循環(huán)。
注意:迭代器 在 返回所有值之后,就空了,沒有了。it這個(gè)對(duì)象,就好比是一個(gè)盛滿水的水壺,調(diào)用__next__方法相當(dāng)于 倒水,水倒完了,水壺自然就空了
迭代器是一次性的,只能作用于一次for循環(huán),當(dāng)然 這不是絕對(duì)的,可以 自己修改成 無限次。如何修改呢?
只需要在 __iter__ 方法中 加上 self.a = 0 這行代碼即可。
總結(jié)
以上是生活随笔為你收集整理的python3迭代器是什么,python3 迭代器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang 切片 接口_如何理解Gol
- 下一篇: python图像处理模糊_Python+