python 迭代器

迭代器是一个可以记住遍历的位置的对象,从第一个元素直到所有元素访问完结束。迭代器只往前不会后退。

迭代器有两个基本的方法:iter()和next()

字符串,列表或元组对象等可迭代对象都可用于创建迭代器

 

 

 

 

>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2
>>>

iter()与next() 结合使用

 

 最后会有一个报错,为了不让它报错,遍历完就停止了,使用try  except

try 接可能产生异常的语句,except 捕获异常,这里就是捕获StopIteration异常

 

 

可迭代对象与迭代器

迭代器属于可迭代对象

可迭代对象的定义: 对象中有__iter__方法的对象

 

 python v3.3 以上 使用from collections.abc import Iterable

self表示本对象,相当于java的this

迭代器:对象中有__iter__和__next__, 虽然只有__next__也不会报错, 二者合称为迭代器协议

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration

__iter__() 用于返回对象本身,以方便for语句进行迭代

__next__() 用于返回下一个元素

iter() 通过调用迭代对象的__iter__函数(如果没有就创建),以返回一个迭代器(iterator)

next()函数就是通过获得对象的__next__

生成器 函数
在函数定义中,如果使用yield语句代替return返回一个值,则定义了一个生成器函数(generator)

生成器函数是一个迭代器,是可迭代对象

def gentripls(n):
      for i in range(n):
            yield i*3
f=gentripls(10)
from collections.abc import Iterable
print(isinstance(f,Iterable))

#结果为 True

写一个生成器函数,可迭代m到n之间的素数

def gentripls(m,n):
      for i in range(m,n):
            for j in [2,3,5,7]:
                  if(i%j==0):break
                  elif(j==7):yield i
f=gentripls(10,100)
for i in f:
      print(i)

 

posted @ 2021-04-21 18:25  binbin_cloud  阅读(66)  评论(0编辑  收藏  举报