python 迭代器

迭代器

想知道什么是迭代器 , 我们需要知道什么是迭代…


什么是迭代?

官方定义:
迭代 , 是访问集合元素的一种方式

听起来更难懂了,其实迭代可以理解为"循环"或者"重复"的意思.
迭代就是指一个重复的过程,每一次都重复都是基于上一次的结果而来


可迭代对象(iterable)

集合,列表,元组,字符串,都是可迭代对象
凡是可以循环的都是可迭代对象

可以通过iter()函数, 来获取可迭代对象的迭代器


如何判断一个对象是否是可迭代对象

通过 isinstance 这个函数判断 , 返回True就是可迭代的.
有个结论: 迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象.

所以可迭代对象,和迭代器对象 还是有一点区别的.


迭代器

定义:

  • 迭代器就是可以迭代取值的工具.

  • 迭代器是一个可以记住遍历的位置 的对象

  • 迭代器从集合的第一个元素开始访问, 直到所有的元素被访问结束.迭代器只能往前不能后退

  • 迭代器不但可以作用于for循环,还可以被next()不断地调用并返回下一个值,知道最后抛出一个StopIteration错误 , 表示无法继续返回下一个值.

只要在类里,写了_iter_这个方法,这个类的对象就是一个迭代器,这还不够

当我们对迭代器使用next()函数的时候,迭代器会向我们返回它所记录位置的下一个位置的数据。
所以不光要写_iter_还要写一个_next_方法,那这个实例就一定是迭代器对象

iter()函数获取的迭代器,其实就是就是调用了_iter_这个方法,这个iter会返回一个迭代器(通常会return自己这个迭代器)

凡是可以作用于next()函数的对象,是迭代器类型(Iterator)


自己创建迭代器

from collections.abc import Iterable


class diedai():

    def __init__(self):
        self.mylist = [1, 2, 3, 4, 5]
        # current用来记录当前访问到的位置
        self.current = 0

    def __iter__(self):
        return self

    def __next__(self):
        # 判断是否全部迭代完毕
        if self.current < len(self.mylist):
            item = self.mylist[self.current]
            self.current += 1
            return item

        else:
        	#这行代码可以自己理解一下
         	self.current = 0
            raise StopIteration


d = diedai()

# print(isinstance([], Iterable))  # True
# print(isinstance({}, Iterable))  # True
# print(isinstance('abc', Iterable))  # True
# print(isinstance(100, Iterable))  # False
print(isinstance(d, Iterable))  #可以先把iter里面的内容pass,得到的也T
print(next(d))
print(next(d))
print(next(d))
print("----")
# 打印三次以后,next会记住下标,for循环的时候也是继续上面的
for  i  in  d:
    print(i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值