迭代器 和 生成器

本文详细解析了迭代器和生成器的概念,优势及应用场景。迭代器是一种用于迭代操作的对象,可在遍历大型数据集时节省内存。生成器则是一种特殊的迭代器,通过yield关键字实现边计算边迭代,提高效率。

什么是迭代器?

迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素, 所有实现了 iternext 两个方法的对象,都是迭代器。

迭代器的优势

在构建迭代器时,不是将所有的元素一次性的加载,而是等调用next方法时返回元素,所以不需要考虑内存的问题。

迭代器应用场景

  • 数列的数据规模巨大
  • 数列有规律,但是不能使用列表推导式描述。

迭代器示例

In [5]: x = [1, 2, 3]

In [6]: y = iter(x)

In [7]: type(y)
Out[7]: list_iterator

In [8]: y.__iter__
Out[8]: <method-wrapper '__iter__' of list_iterator object at 0x109ee0eb8>

In [9]: y.__iter__()
Out[9]: <list_iterator at 0x109ee0eb8>

In [10]: y.__next__()
Out[10]: 1

In [11]: y.__next__()
Out[11]: 2

In [12]: y.__next__()
Out[12]: 3

In [13]: y.__next__()
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-13-2c928e09acf4> in <module>()
----> 1 y.__next__()

StopIteration:

In [14]:

生成器

生成器是一种高级迭代器,使得需要返回一系列元素的函数所需的代码更加的简单和高效。一边循环一边计算的机制,称为生成器。

生成器示例

# 示例1:将列表表达式改装成生成器
In [20]: a_list = [x**2 for x in range(5)]
In [21]: a_list
Out[21]: [0, 1, 4, 9, 16]

In [22]: a_generator = (x**2 for x in range(5))

In [23]: a_generator
Out[23]: <generator object <genexpr> at 0x109e95830>
# 示例2:通过 yield
In [33]: def gen_by_yiels():
    ...:     yield "first"
    ...:     yield "second"
    ...:     yield "third"
    ...:
    
In [34]: gen_by_yiels
Out[34]: <function __main__.gen_by_yiels()>

In [35]: gen_by_yiels()
Out[35]: <generator object gen_by_yiels at 0x109f2bf68>

In [36]: for x in gen_by_yiels():
    ...:     print(x)
    ...:
    ...:
    ...:
first
second
third

参考资料:https://www.zhihu.com/question/20829330

转载于:https://www.cnblogs.com/ronky/p/9844985.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值