Python面试题:如何实现一个高效的Python生成器?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1858个文字,预计阅读时间需要8分钟。
首先,说明一下生成器也是一种迭代器,它具有迭代器的那些优点。为什么需要生成器呢?因为到目前为止,我们遇到的迭代器都不是自己写的,都是别人定义好的。那么如何自己造一个生成器呢?下面是一些步骤:
1. 定义一个类,该类必须有一个 `__iter__()` 方法,用于返回生成器对象。
2.在类中定义一个 `__next__()` 方法,该方法用于产生序列中的下一个值。
3.在需要生成序列的地方,使用 `yield` 语句来返回值,并在每次返回后暂停执行,等待下一次迭代调用。
4.创建生成器对象并迭代它,每次迭代都会调用 `__next__()` 方法,直到序列结束。
首先说明一下生成器也是迭代器,也有迭代器的那些优点。
那为什么要生成器呢?因为到目前为止都 不是你写的迭代器,都是别人定义好的。那如何自己去造一个迭代器呢?下面的内容就会给你答案。
想要自己造一个迭代器,我们可以根据迭代器的特征(只要一个对象有__iter__和__next__方法那它就是迭代器),自己定义一个类,然后定义一个__iter__()和__next__(), 然后这个类实例化的对象就是一个迭代器啦。
但是这样写太麻烦啦!何况我们现在还没有学到类的知识,怎么办?给你一个魔法棒,让你快速优雅高效地造一个迭代器。
yield关键字
第一种自造迭代器的方法就是使用yield关键字。具体怎么实现呢?
非常简单,如下所示:
def g():print("Hey~ 生成器")
yield 1
上面的写法非常类似于函数的定义,相当于把return换成了yield(当然,并没有这么简单)。
本文共计1858个文字,预计阅读时间需要8分钟。
首先,说明一下生成器也是一种迭代器,它具有迭代器的那些优点。为什么需要生成器呢?因为到目前为止,我们遇到的迭代器都不是自己写的,都是别人定义好的。那么如何自己造一个生成器呢?下面是一些步骤:
1. 定义一个类,该类必须有一个 `__iter__()` 方法,用于返回生成器对象。
2.在类中定义一个 `__next__()` 方法,该方法用于产生序列中的下一个值。
3.在需要生成序列的地方,使用 `yield` 语句来返回值,并在每次返回后暂停执行,等待下一次迭代调用。
4.创建生成器对象并迭代它,每次迭代都会调用 `__next__()` 方法,直到序列结束。
首先说明一下生成器也是迭代器,也有迭代器的那些优点。
那为什么要生成器呢?因为到目前为止都 不是你写的迭代器,都是别人定义好的。那如何自己去造一个迭代器呢?下面的内容就会给你答案。
想要自己造一个迭代器,我们可以根据迭代器的特征(只要一个对象有__iter__和__next__方法那它就是迭代器),自己定义一个类,然后定义一个__iter__()和__next__(), 然后这个类实例化的对象就是一个迭代器啦。
但是这样写太麻烦啦!何况我们现在还没有学到类的知识,怎么办?给你一个魔法棒,让你快速优雅高效地造一个迭代器。
yield关键字
第一种自造迭代器的方法就是使用yield关键字。具体怎么实现呢?
非常简单,如下所示:
def g():print("Hey~ 生成器")
yield 1
上面的写法非常类似于函数的定义,相当于把return换成了yield(当然,并没有这么简单)。

