创建一个迭代器

1.导包

from collections.abc import Iterable, Iterator

2.isinstance(,)

x = [1,2,3,'asd']

print(isinstance(x,Iterable))

判断x是否可以迭代,结果返回True

3.列表和一个最简单的生成器

y = [x for x in range(10)]  # y是一个列表,可迭代,不是迭代器,只是里面存放了可迭代对象
z = (x for x in range(10))  # z是一个最简单的生成器,可迭代,是特殊的迭代器

print(isinstance(iter(y),Iterable)) # iter()(生成一个迭代器)

print(isinstance(y,Iterable)) # True,列表可迭代
print(isinstance(y,Iterator)) # False,列表不是迭代器
print(isinstance(z,Iterator)) # True,生成器是迭代器

4.创建一个迭代器类

class MyIterator(object):
    # 这个类实现的是迭代器类
    def __init__(self, newlist):
        self.newlist = newlist
        # 记录的是当前迭代的索引
        self.current_index = 0

    def __iter__(self):
        #当前的类中,因为iter这个魔法方法获取的是__iter__方法中的迭代器
        # 初始化一个迭代器
        iterobj = self.newlist
        return iterobj

    def __next__(self):
        # 当前的魔法方法记录遍历的位置,第二个功能是记录需要获取的值
        if self.current_index < len(self.newlist):     # 控制下标在列表长度内
            self.current_index += 1                    # 让下标向前移动
            return self.newlist[self.current_index-1]  # 返回之间位置的元素
        else:
            raise StopIteration       # 当下标越界时,生成一个停止迭代的异常

5.验证生成的迭代器

if __name__ == '__main__':
    obj = MyIterator([1,2,3,4,5,6,7,8,9]) # 实例化一个obj对象
    while True:
        try:
			print(next(obj))      # next进行下一个元素的迭代访问
        except StopIteration:     # 捕获停止迭代异常,退出while循环,不再迭代打印
            break
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值