Python基本语法之迭代器和生成器

版权声明:转载请注明出处及作者! 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()

示例运行结果:

 

 

如果你喜欢这边文章,别忘了点赞和评论哦!

猜你喜欢

转载自blog.csdn.net/chenzhanhai/article/details/84312716