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)
posted @ 2019-07-04 10:44  吴吃辣  阅读(3343)  评论(0编辑  收藏  举报