迭代器|生成器|可迭代對象

"""
迭代器的定義:
1. 類中含有__init__() 和 __next__() 方法
2. __iter__() 返回對象本身,即self
3. __next__() 返回下一個迭代數(shù)據(jù),如果沒有數(shù)據(jù)了,則拋出StopIteration異常,終止迭代
"""
class IteratorDemo():
    def __init__(self):
        self.counter = 0

    def __iter__(self):
        return self

    def __next__(self):
        self.counter += 1
        if self.counter >= 3:
            raise StopIteration()
        return self.counter

# 實例化迭代器
it = IteratorDemo()
# 可以被next()函數(shù)調(diào)用,并不斷返回下一個值的對象稱為迭代器
v1 = next(it)

"""
生成器函數(shù)的定義:
1. 函數(shù)內(nèi)使用yield關(guān)鍵字,即生成器函數(shù)
2. 生成器對象(內(nèi)部是根據(jù)生成器類generator創(chuàng)建的對象),生成器類內(nèi)部也聲明了:__iter__() 和 __next__() 方法
生成器實際上是一種特殊的迭代器
"""
def generatorFunc():
    yield 1
    print(123)

# 創(chuàng)建生成器對象
g = generatorFunc()
# print(next(g))
# print(next(g))


"""
可迭代對象的定義:
1. 類中含有__iter__() 方法,且返回一個迭代器對象|生成器對象
"""
class IterbleDemo():
    def __iter__(self):
        return IteratorDemo()

# 實例化可迭代對象
it = IterbleDemo()
# 可迭代對象是可以使用for來進(jìn)行循環(huán),在循環(huán)的內(nèi)部其實是先執(zhí)行__iter__()方法,獲取其迭代對象,然后在內(nèi)部執(zhí)行這個迭代器對象的next()功能,逐步取值
for i in it:    
    print(i)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容