版权声明:转载请注明出处及作者! https://blog.csdn.net/chenzhanhai/article/details/84312716
迭代器
迭代是访问集合类元素的一种方式,它可以记住遍历的位置的对象,从集合的第一个元素开始访问,直到所有的元素被访问完结束,只能往前不会后退。字符串、列表或元组对象都可用于创建迭代器。
迭代器有两个基本的方法:iter()和next()。
迭代器示例如下:
import sys
list=[1,2,3,4]
it = iter(list)
for x in it:
print (x)
it = iter(list)
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
示例运行结果:
自定义迭代器类
我们可以定义一个类,作为一个迭代器使用。
创建迭代器时需要在类中实现两个Python预定义方法 __iter__() 和 __next__() 。
__iter__() 方法返回一个特殊的迭代器对象, __next__() 方法返回下一个迭代器对象并通过 StopIteration 异常标识迭代的完成。StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况。在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代,从而实现指定迭代次数的迭代器类。
自定义迭代器示例如下:
import sys
class MyNumbers:
def __iter__(self):
self.n = 1
return self
def __next__(self):
if self.n <= 9:
x = self.n
self.n += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
示例运行结果:
生成器
在 Python 中,使用了 yield 保留关键字的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
生成器示例如下:
import sys
def GetOddList(n):
for i in range(1, n + 1):
if i % 2 != 0:
yield i
f = GetOddList(10)
while True:
try:
print (next(f))
except StopIteration:
sys.exit()
示例运行结果:
如果你喜欢这边文章,别忘了点赞和评论哦!