欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 生成器generator和迭代器Iterator

程序员文章站 2024-02-12 12:44:55
...

迭代 Iteration
使用for循环来遍历list或者tuple,这种遍历就是迭代,遍历的list或者tuple称为可迭代对象Iterable

列表生成式
列表中,直接写表达式,生成相对应的列表

>>> [ x + 1 for x in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

生成器 Generator
python中,一边循环一边计算的机制,就叫生成器,创建生成器generator的方法:将列表生成式中括号改用括号即可。生成器会每次输出一个,可以调用next(obj)来输出

>>> a =( x + 1 for x in range(10))
>>> next(a)
1

迭代器 Iterator
可以用next(obj)来调用,并不断返回下一个值的对象,都是迭代器:Iterator
迭代器是一个数据流,可以调用并返回下一次的值,直到没有值时,抛出StopIteration异常。可以提高性能,节省内存空间。
还有一种使用yield来产生迭代器的方式,简单的方式,就是在for循环中,可以用到print打印输出的地方,换成yield就变成了迭代器。

特点:

  • next(Iterator)来调用
  • 每次调用后,返回下一次的值
  • 两种创建方式: 列表生成式中括号改括号;使用yield(相当于替代print打印输出)创建的函数
  • 因为是一边循环,一边推断后边的值,所以能很大的提高性能,而不会因为数据量大,占用大量的内存空间。

总结

  • 凡是可以用for循环来遍历的,都是可迭代的,主要是一些集合,包括list, tuple, dict, str等
  • 凡是可以作用于next()函数的对象都是迭代器Iterator,比如生成器generator (列表生成式的中括号改成括号即可),还有使用yield的函数也是迭代器,每次需要用next(obj)来返回值。
  • list、tuple等集合类型是iterable, 但不是Iterator。但可以用iter(list)将可迭代对象转换成迭代器。
  • python的for循环,本质上就是不断的调用next()来实现遍历的。