Python 迭代器、生成器

迭代器是一个可以记住遍历位置的对象。

迭代器从集合的第一个元素开始访问,直到所有的元素被访问完。迭代器只能往前不会后退。

迭代器两个基本方法: iter() next()

 

1. 迭代器 VS 可迭代对象(Iterable)

列表、元组、字典、集合都是可迭代对象。它们是迭代的容器,可从容器中获取迭代器(Iterator)。

实例:

从元组返回一个迭代器

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)    # 创建迭代器对象

print(next(myit))       # 输出迭代器的下一个元素
print(next(myit))
print(next(myit))  

输出:

apple
banana
cherry

 

字符串也是可迭代对象

复制代码
mystr = "banana"
myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
复制代码

输出:

b
a
n
a
n
a

 

2. 遍历迭代器

mytuple = ("apple", "banana", "cherry")
for x in mytuple:
    print(x)

输出:

apple
banana
cherry

提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。

 

3. 创建迭代器

把一个类作为一个迭代器需要在类中实现 __iter__() 和 __next__() 方法

__iter__() 方法返回一个特殊的迭代器对象,这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。

__next__() 方法返回下一个迭代器对象

实例

创建一个返回数字的迭代器,初始值 1,逐步递增 1。

复制代码
class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x
 
myclass = MyNumbers()
myiter = iter(myclass)
 
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
复制代码

 输出:

1
2
3
4
5

 

StopIteration

结束迭代,防止出现无限循环。

复制代码
class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    if self.a <= 10:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
 
myclass = MyNumbers()
myiter = iter(myclass)
 
for x in myiter:
  print(x)
复制代码

输出:

复制代码
1
2
3
4
5
6
7
8
9
10
复制代码

 

posted @   做梦当财神  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示