首页 新闻 会员 周边 捐助

迭代器是类对象,生成器是函数

0
[已关闭问题] 关闭于 2025-09-09 17:50
迭代器
  • 需要定义一个类,并实现 __iter__()__next__() 方法
  • 示例:
  • class Countdown:
        def __init__(self, step):
            self.step = step
    
        def __next__(self):
            if self.step <= 0:
                raise StopIteration
            self.step -= 1
            return self.step
    
        def __iter__(self):
            return self
    生成器
    • 通过定义一个包含 yield 语句的函数来实现
    • def countdown(step):
          while step > 0:
              yield step
              step -= 1

       

      • 迭代器
        • 需要手动创建迭代器实例,然后通过 next() 方法获取下一个值
        • c = Countdown(5)
          for i in c:
              print(i)

           

          • 生成器
            • 调用生成器函数会返回一个生成器对象,可以直接使用 for 循环或 next() 方法
            • 示例:
            • gen = countdown(5)
              for i in gen:
                  print(i)

               

            • 内存使用
              • 迭代器
                • 通常会将所有数据存储在内存中
                   
              • 生成器
                • 不会将所有数据一次性加载到内存中,而是按需生成数据,因此更节省内存
                    • 一次性使用
                      • 迭代器
                        • 可以多次迭代,例如列表可以多次遍历
                           
                      • 生成器
                        • 是一次性使用的,每次调用生成器函数都会创建一个新的生成器对象
_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-09-09 17:49
< >
分享
所有回答(1)
0

生成器的实现原理

生成器函数通过 yield 语句实现迭代功能。每次调用生成器的 __next__() 方法时,生成器会从上次暂停的地方继续执行,直到遇到下一个 yield 语句
 
。这种机制使得生成器可以按需生成数据,而不是一次性生成所有数据
_java_python | 园豆:984 (小虾三级) | 2025-09-09 17:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册