迭代器与生成器专项测试
考察知识点
- 迭代器协议:__iter__和__next__方法、StopIteration异常
- 生成器函数:yield关键字、生成器状态、惰性计算
- 生成器表达式:语法形式、与列表推导式的对比
- yield高级用法:yield from、send方法、close方法
itertools是Python标准库模块,提供高效迭代工具函数,包括chain连接迭代器、zip_longest不等长配对、islice切片迭代器、count无限计数、cycle循环迭代等。
迭代器协议要求对象实现__iter__方法返回迭代器本身,以及__next__方法返回下一个元素或抛出StopIteration异常表示迭代结束。
自定义迭代器类需要实现完整的迭代器协议:__iter__方法返回迭代器本身,__next__方法返回下一个元素并在迭代结束时抛出StopIteration异常。
yield from语法用于将生成器的产出委托给另一个子生成器,简化嵌套生成器的编写,可以自动处理子生成器的所有产出和最终返回值。
itertools提供的count、cycle、repeat是无限迭代器,可以产生无限序列。使用时必须手动终止(如break或islice限制),否则会无限循环。
itertools.count(10, 2)产生的序列是:
迭代器的__next__方法在什么情况下抛出StopIteration?
yield from iterable与for item in iterable: yield item的区别是?
itertools.chain([1,2], [3,4])的输出是?
以下哪个是正确的可迭代对象设计(可多次迭代)?
itertools.____________连接迭代器。____________不等长配对。____________切片迭代器。count无限计数。cycle无限循环。repeat重复元素。from_iterable展开嵌套。内存高效,惰性计算。可处理无限序列。list(chain([1,2],[3]))返回[1,2,3]。
yield ____________委托子生成器。自动产出____________元素。可获取子生成器的____________值。简化嵌套迭代。chain生成器用yield from iterable。子生成器return值赋给result = yield from sub()。yield from支持双向通信。用于组合多个迭代器。
count(____________, ____________)无限计数。____________(seq)无限循环元素。repeat(obj, times)重复。无限迭代器需手动终止。用islice限制数量。用takewhile条件限制。用break退出循环。count(10,2)序列:10,12,14...无限。
迭代器协议:____________返回____________,____________返回下一个元素。迭代结束抛StopIteration。next()函数调用next方法。for循环自动处理StopIteration。迭代器只能正向遍历一次。可迭代对象需实现iter返回迭代器。
迭代器类实现____________和____________。__iter__返回____________。__next__返回元素或抛StopIteration。可迭代对象__iter__返回新迭代器。迭代器用完耗尽,可迭代对象可多次迭代。计数迭代器用index跟踪位置。自定义迭代器比生成器更灵活。