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)