Python 迭代器与生成器

95 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

1.可迭代对象(Iterable)

可迭代对象,可以简单理解为可遍历对象,即能够使用 for 循环遍历的对象。Python中常见的可迭代对象有:列表、元组、字符串、集合、range、字典等。

迭代器和生成器都是可迭代对象。

2.迭代器 (Iterator)

迭代,就是反复执行某一步骤的意思。迭代器,则是用来实现这一动作的东西。

迭代器的概念主要涉及到两部分:可迭代对象Iterable迭代器对象Iterator

3.可迭代对象

凡是可以返回一个迭代器的对象,都可以叫做可迭代对象,可迭代对象不是某一个具体的对象,而是实现了特定功能的一类对象
Eg:

  1. ata = (1,2,3,4)
  2. ``
  3. i1 = iter(data)
  4. ``
  5. i2 = iter(data)
    迭代器是一个内部带有状态的对象。在你调用next函数时,它会根据内部的状态来返回不同的值,以此达到遍历数据的目的:

4.创建迭代器

一个迭代器对象需要实现两个成员函数:__iter____next____iter__函数返回迭代器自身,__next__函数则是根据内部状态决定是返回一个值,还是引发一个StopIteration异常。 EG:

  1. class SimpleRange:
  2. start = 0
  3. max = 0
  4. def __init__(self,start,max): #构造函数,指定Range的起始值start与最大值max
  5. self.start = start
  6. self.max = max
  7. def __iter__(self):
  8. return self #返回自己
  9. ``
  10. def __next__(self):
  11. if self.start < self.max: #判断start是否到达了max
  12. t = self.start
  13. self.start += 1
  14. return t #不是则返回start的值,并且start自增1
  15. else:
  16. raise StopIteration #是则引发异常,宣告迭代结束
  17. ``
  18. for s in SimpleRange(0,3): #获取0-2的值
  19. print(s)
    生成器是一类特殊的迭代器,它是一种更为高级、更为优雅的迭代器。
    在 Python 中有两种类型的生成器:生成器函数以及生成器表达式

5.表生成式

要介绍生成器表达式,首先需要了解一下列表生成式。 列表生成式是一种创建列表的方式,当我们要创建一个满足特定条件的列表时,使用它就非常方便。
比如我们要创建一个包含010的平方的列表,传统的做法是:

data = []  for x in range(11):      data.append(x * x)  

而使用列表生成式,就可以一行语句创建:

data =[x*x for x in range(11)]  

方括号里的左边部分是一个表达式x*x,代表列表元素怎么计算得来,右边是用for来表示的范围。

如果要进行条件筛选,可以在for后面带上if语句