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

2022-06-15  本文已影响0人  Cui_Shu
"""
迭代器的定义:
1. 类中含有__init__() 和 __next__() 方法
2. __iter__() 返回对象本身,即self
3. __next__() 返回下一个迭代数据,如果没有数据了,则抛出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()函数调用,并不断返回下一个值的对象称为迭代器
v1 = next(it)

"""
生成器函数的定义:
1. 函数内使用yield关键字,即生成器函数
2. 生成器对象(内部是根据生成器类generator创建的对象),生成器类内部也声明了:__iter__() 和 __next__() 方法
生成器实际上是一种特殊的迭代器
"""
def generatorFunc():
    yield 1
    print(123)

# 创建生成器对象
g = generatorFunc()
# print(next(g))
# print(next(g))


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

# 实例化可迭代对象
it = IterbleDemo()
# 可迭代对象是可以使用for来进行循环,在循环的内部其实是先执行__iter__()方法,获取其迭代对象,然后在内部执行这个迭代器对象的next()功能,逐步取值
for i in it:    
    print(i)
上一篇下一篇

猜你喜欢

热点阅读