Python3迭代器

迭代器(iterator)

迭代
  • 科学概念:是一个重复反馈过程的活动,每一次迭代得到的结果会作为下一次迭代的初始值。
  • python概念
    • 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完才结束。迭代器只能往前不会后退。
    • 对tuple、list、dictionary、set、str等类型的数据使用for可以进行遍历,这样的过程也叫迭代
什么叫迭代器
  • 如果一个类继承于object,并且实现了__iter__方法和__next__方法,那么这个类的实例对象就叫做迭代器。
    # 判断一个对象是否是迭代器
    isinstance(对象,Iterator)
    # True代表是 False代表不是
    
什么叫可迭代对象
  • 如果一个类(这个类继承于object)里面实现了__iter__方法,那么这个类的实例对象就是一个可迭代的对象。但此时还不能实现迭代。
    # 判断一个对象是否是可以迭代的对象
    isinstance(对象,Iterable) 
    # True代表是 False代表不是
    
  • 如果__iter__方法返回的是一个对象,并且这个对象是一个迭代器,那么这个类的实例对象就是一个真正的可迭代对象。
for x in 对象:
  • 1.在for循环开始之前,python会自动调用isinstance方法判断对象是否是一个可迭代的对象。即isinstance(对象,Iterable)
    - True,代表是。进入第二步
    - False,返回异常。TypeError:‘对象’ object is not iterable

  • 2.传入对象调用iter方法,获得__iter__的返回值,python并自动调用isinstance方法判断返回值是否是一个迭代器。即isinstance(对象,Iterator)
    - True,代表是。进入第三步
    - False,返回异常。TypeError:iter() returned non-iterator of type ‘NoneTpye’

  • 3.调用迭代器的__next__方法,每for一次调用一次__next__方法,并把返回值赋值给变量x

自定义一个可迭代对象
	class Color(object):
        def __init__(self):
                self.colors = list()
                self.count = 0

        def add(self,name):
                self.colors.append(name)

        def __iter__(self):
                return self

        def __next__(self):
                if self.count < len(self.colors):
                        ret = self.colors[self.count]
                        self.count += 1
                        return ret
                else:
                		self.count = 0
                        raise StopIteration


	color = Color()
	color.add("red")
	color.add("blue")
	color.add("yellow")

	for x in color:
	        print(x)
	        
	# red
	# blue
	# yellow

完成!

总结:

  • 如果一个类实现了__iter__方法和__next__方法,那么这个类的实例对象就叫做一个迭代器。

  • 如果一个类实现了__iter__方法,并且__iter__方法返回的对象是一个迭代器,那么这个类的实例对象就是一个真正可以迭代的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值