经典面试题-迭代器与生成器

本文引用自霍格沃兹测试开发学社录播课

经典面试题-迭代器与生成器分别是什么

霍格沃兹测试开发
http://ceshiren.com

问题

面试官可能会问:Python 中迭代器与生成器分别是什么?

考察点分析

面试官主要的目的是想要了解:

  • 迭代器和生成器的实现原理
  • python 使用水平

技术点

这个问题涉及到的技术知识为:

  • Python 迭代器的定义和实现
  • Python 生成器的定义和特点
  • 迭代器和生成器的联系和区别

迭代器 iterator

  • Python 迭代器
class PowTwo:
    """2的指数迭代器"""
    def __init__(self, max=0):
        self.max = max
    def __iter__(self):
        self.n = 0
        return self
    def __next__(self):
        if self.n <= self.max:
            result = 2 ** self.n
            self.n += 1
            return result
        else:
            raise StopIteration
numbers = PowTwo(3)  # 实例化
i = iter(numbers)  # 获得一个迭代器
print(next(i))  # 获取下一个元素

生成器 generator

  • 生成器
def my_gen():
    n = 1
    # 生成器函数包含yield语句
    yield n
    n += 1
    yield n
    n += 1
    yield n
# 使用for循环遍历
for item in my_gen():
    print(item)

总结

面试官可能会问:Python 中迭代器与生成器分别是什么?

  • 联系
    • 生成器是迭代器的子类,因此生成器是一个迭代器。
    • 生成器是创建迭代器的一种简便方式
  • 区别
    • 迭代器可以通过定义一个类来实现,而生成器不需要定义成类;
    • 生成器的语法中可以使用 yield 表达式,但迭代器中不可以;
    • 生成器的语法更加简练,而自定义的迭代器类代码较多: