Python-5-迭代器生成器

编写一个计数器类型,创建的对象可以通过for循环遍历

提示:for循环可以遍历的对象是可迭代对象,内部可以通过__iter__()魔法方法获取遍历数据的迭代器
提示2:yield关键字

class Counter:
    """计数器类型"""
    # 请在此处编写代码
    pass
cnt = Counter(100)
for x in cnt:
    print(x)   # 打印0~100的数据
使用类和生成器
class Counter:
    """计数器类型"""

    def __init__(self, stop):
        self.stop = stop

    def __iter__(self):
        # 返回一个生成器,用于产生从0到stop-1的整数序列
        return (x for x in range(1, self.stop+1))


cnt = Counter(100)
for x in cnt:
    print(x)

__iter__() 方法返回了一个生成器表达式,它会产生一个从0到 stop-1 的整数序列。每次 for 循环请求下一个值时,生成器就会yield一个值,直到达到stop指定的上限,然后抛出StopIteration异常来结束迭代。

range函数不包含结束索引本身,因此self.stop+1,最终打印0~100

在类中使用 yield 关键字创建一个生成器函数
class Counter:
    """计数器类型"""
    def __init__(self, start, stop):
        self.start = start
        self.stop = stop

    def count(self):
        """生成器方法,产生从start到stop的整数序列"""
        n = self.start
        while n <= self.stop:
            yield n
            n += 1


cnt = Counter(0, 100)
for x in cnt.count():
    print(x)

每次迭代for循环中,生成器对象被迭代,每次迭代都会执行生成器方法,直到遇到yield语句,此时生成器方法暂停并返回yield后面的表达式的值。

jie

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值