Python 迭代器(Iterator)

2019-08-21  本文已影响0人  吴吃辣

版权所有,未经许可,禁止转载


章节

Python 介绍
Python 开发环境搭建
Python 语法
Python 变量
Python 数值类型
Python 类型转换
Python 字符串(String)
Python 运算符
Python 列表(list)
Python 元组(Tuple)
Python 集合(Set)
Python 字典(Dictionary)
Python If … Else
Python While 循环
Python For 循环
Python 函数
Python Lambda
Python 类与对象
Python 继承
Python 迭代器(Iterator)
Python 模块
Python 日期(Datetime)
Python JSON
Python 正则表达式(RegEx)
Python PIP包管理器
Python 异常处理(Try…Except)
Python 打开文件(File Open)
Python 读文件
Python 写文件
Python 删除文件与文件夹


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)
上一篇下一篇

猜你喜欢

热点阅读