每天一道面试题:day03

124 阅读1分钟

question:迭代器和生成器的区别?

answer:
要说这两者的区别,首先得提到可迭代对象。可迭代对象(iterable),是具有__iter__属性,可以被iter()函数调用的一个对象,其返回值就是迭代器。
迭代器(iterator)是具有__next__属性,可以被next()函数调用并返回下一个值的对象。
而生成器(generator)既是可迭代对象又是迭代器(同时拥有__iter__和__next__属性)。生成器通常是一个含有yield关键字的函数,把yield之前的代码放在next方法中,每次执行到yield时暂时离开,并返回yield关键字后面所指定的数据,实现惰性地提供数据,即循环一次计算一次返回一个值。在需要的时候才计算结果,而不是一次性把所有结果都计算出来,白白浪费内存。