0
点赞
收藏
分享

微信扫一扫

python学习笔记(8)迭代器

穆熙沐 2022-05-05 阅读 59

文章目录

简介

迭代是python引以为傲的强大功能之一,它拥有遍历所有值的能力,这也是一种访问集合元素的其中一个方式。他可以从第一个元素开始访问直到结束为止。但是迭代器只能够往前不能后退。在技术层面上,迭代器是实现迭代器协议的对象,其中的主要方法有:iter() 和 next()。
常见的迭代器对象如下所示:

list=["dtcloud","dtcloud360","中亿丰数字","苏州"]
it = iter(list)    # 创建迭代器对象
for x in it:
    print (x, end=" ")

在这里插入图片描述

创建迭代器

上文中提到迭代器在类中实现有两个方法,分别是iter() 和 next()。
iter() 方法会返回一个特别的对象,与init()方法类似,开发者可以执行操作(初始化等)。
next()方法会返回下一个迭代器对象。
下面的实例会创建一个返回数字的迭代器,从最初的1开始,逐步增加:

class Mydtcloud:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x
 
myclass = Mydtcloud()
myiter = iter(myclass)
 
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

在这里插入图片描述
StopIteration 异常的作用是为了防止无限循环的出现,标记迭代已经完成。在next()方法中我们能够设置在指定的循环轮数结束之后激活StopIteration异常来完成迭代。
下面的实例会完成20次的迭代,随后结束任务:

class Mydtcloud:
  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
 
myclass = Mydtcloud()
myiter = iter(myclass)
 
for x in myiter:
  print(x)

在这里插入图片描述

生成器

使用了yield的函数在Python中被称之为生成器。生成器与通常的函数不同,它返回的是一个迭代器。相对的,生成器只能用于迭代操作,换句话讲,生成器也能够理解为一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
下面由实现斐波那数列来感受生成器的作用:

import sys
 
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, dtcloud = 0, 1, 0
    while True:
        if (dtcloud > n): 
            return
        yield a
        a, b = b, a + b
        dtcloud += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()

在这里插入图片描述

举报

相关推荐

0 条评论