全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  应聘面试  >  Python面试题

说一下你对Python中迭代器和生成器的理解

发布时间:2022-08-22 16:17:00
发布人:wjy

点评:很多人面试者都会写迭代器和生成器,但是却无法准确的解释什么是迭代器和生成器。

如果你也有同样的困惑,可以参考下面的回答。

迭代器是实现了迭代器协议的对象。跟其他编程语言不同,Python中没有用于定义协议或表示约定的关键字,像interface、protocol这些单词并不在Python语言的关键字列表中。

Python语言通过魔法方法来表示约定,也就是我们所说的协议,而__next__和__iter__这两个魔法方法就代表了迭代器协议。

生成器是迭代器的语法升级版本,让我们可以用更为简单的带来实现一个迭代器。

面试中经常会让面试者写生成斐波那契数列的迭代器,下面给出参考代码,其他的迭代器可以如法炮制。

class Fib(object): def __init__(self, num): self.num = num self.a, self.b = 0, 1 self.idx = 0 def __iter__(self): return self def __next__(self): if self.idx < self.num: self.a, self.b = self.b, self.a + self.b self.idx += 1 return self.a raise StopIteration() 

如果用生成器的语法来改写上面的代码,代码会简单优雅很多。

def fib(num): a, b = 0, 1 for _ in range(num): a, b = b, a + b yield a 可以通过for-in循环从迭代器对象中取出值,也可以使用next函数取出迭代器对象中的下一个值。

Python中迭代器和生成器的理解

相关文章

华为外包python面试题-Python实现斐波那契数列

2023-07-25

常见Python程序员面试题

2023-07-21

Python面试题及答案

2023-07-20

matlab和python实现pca降维算法

2023-03-29

【Python面试题】运行下面的代码是否会报错?

2022-08-23

【Python面试题】对下面给出的字典按值从大到小对键进行排序。

2022-08-23
在线咨询 免费试学 教程领取