学习笔记-迭代器

迭代器

  • 用来表示一连串数据流的对象。重复调用迭代器的__next__() 方法(或将其传给内置函数next())将逐个返回流中的项、 当没有数据可用时,则会引发Stopiteration 异常。

  • 迭代器必须有__iter__() 方法用来返回该迭代器的对象自身,因此迭代器必定也是可迭代对象,

  • 使用内置函数iter()来创建迭代器对象

  • 判断:iter 和__next__

      #判断: a 可迭代,没有__next__方法,不是迭代器
      >>> a
      [1, 2]
      >>> hasattr(a,'__iter__')
      True
      >>> hasattr(a,'__next__')
      False
    
      # 生成迭代器
      >>> m=iter(a)
      #逐一读取,最后抛出StopIteration 异常
      >>> m.__next__()
      1
      >>> m.__next__()
      2
      >>> m.__next__()
      Traceback (most recent call last):
        File "<pyshell#115>", line 1, in <module>
          m.__next__()
      StopIteration
    

斐波那切数列的迭代器:

	class Fibs:
	    def __init__(self,max):
	        self.max=max
	        self.a=0
	        self.b=1
	    def __iter__(self):
	        return self
	    def __next__(self):
	        fib = self.a
	        if fib > self.max :
	            raise StopIteration
	        self.a,self.b=self.b,self.a+self.b
	        return fib
	
	fibs=Fibs(10)
	
	print (fibs.__next__())
	lst=[i for i in fibs]
	print (lst)

生成器

#生成器函数
>>> def test():
	yield 1
	yield 5
	yield 10
>>> a=test()
>>> [i for i in a ]
[1, 5, 10]

斐波那切数列的生成器

>>> def fibs():
	a,b=0,1
	while True :
		yield a
		a,b=b,a+b
>>> import itertools
>>> [ i for i in itertools.islice(fibs(),10)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值