Python 迭代器(Iterator) - 奇客谷qikegu.com

Python 迭代器(Iterator)


Python 迭代器(Iterator)

迭代器是一个包含有限数量值的对象。

迭代器是一个可以被迭代的对象,可以遍历迭代器中的所有值。

从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由方法__iter__()__next__()组成。

可迭代的数据类型

列表、元组、字典和集合都是可迭代的对象,可以从其中获得迭代器。

所有这些对象都可用iter()方法获取迭代器:

示例

从元组中获取一个迭代器,遍历并打印每个值:

mytuple = ("自行车", "汽车", "高铁")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

复制

字符串也是可迭代对象,可以从中获取迭代器:

示例

使用迭代器遍历字符串:

mystr = "自行车"
myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))

复制

for循环迭代

我们也可以使用for循环来遍历一个迭代器:

示例

迭代元组的值:

mytuple = ("自行车", "汽车", "高铁")

for x in mytuple:
  print(x)

复制

示例

迭代字符串的字符:

mystr = "自行车"

for x in mystr:
  print(x)

复制

for循环内部实际上进行了迭代器的获取,及next()方法的调用。

创建迭代器

一个对象要创建迭代器,变成可迭代的,必须实现方法:__iter__()__next__()

__iter__()方法必须始终返回迭代器对象本身。

__next__()方法必须返回序列中的下一项。

示例

创建一个返回数字的迭代器,从1开始,每个序列项递增1(返回1、2、3、4、5等):

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))

复制

StopIteration

上面示例next()调用将永远继续,我们可以使用StopIteration语句停止迭代。

__next__()方法中,我们可以根据迭代次数添加终止条件来引发错误:

示例

迭代20次后停止:

class MyNumbers:
  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 = MyNumbers()
myiter = iter(myclass)

for x in myiter:
  print(x)

复制


Doc navigation

← Python 继承

Python 模块 →

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值