python —— 迭代器、生成器

可迭代对象:迭代器、生成器、序列、字典

一、迭代器

迭代器:实现了迭代协议的对象

迭代协议:_ _iter_ _:返回迭代对象本身

                  _ _next_ _:返回可迭代对象的下一个元素

一个完整的迭代器最终要抛出异常(StopIteration)结束,否则将进入无限循环

#通过使用迭代器模拟for函数
class MyIterator:
    def __init__(self, stop):
        self.start = -1          #开始值为-1 否则__next__中if 达不到判断,提前结束循环
        self.stop = stop

    def __iter__(self):          #返回迭代对象本身
        return self

    def __getitem__(self, item):  #使用下标访问 调用__getitem__ 方法
        return self.start + item + 1

    def __next__(self):
        self.start = self.start + 1
        if self.start < self.stop:
            return self.start
        else:
            raise StopIteration      #抛出异常,停止循环

data = MyIterator(10)
for i in data:    
    print(i)

二、生成器

generator: 生成器

生成器函数:定义了一个函数,且函数有使用yield

生成器:执行函数返回的就是生成器

def yield_test():
    yield "yield"

data = yield_test()  #data是一个generator(生成器), 也是一个迭代器
print(data, type(data))
print(next(data))   #next(data)就是去访问__next__(), 带有__next__()的是迭代器

生成器的执行:

1、send 生成器内部方法: 生成器对象.send(None)

2、next 内置方法,next(生成器对象)

生成器也是一个迭代器,可以使用迭代器的功能

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值