迭代器、生成器、可迭代对象
迭代器出现的原因 Python中的列表,有可能会占用很大的空间。而迭代器,它是每一次用__next__调用时才计算出值,这会节省内存空间。 迭代器、生成器、可迭代对象的关系 可迭代对象一般是列表、元组、字典、字符串等可以For循环的对象。可通过以下语句判断是不是可迭代对象。 from collections.abc import Iterator, Iterable l = [1, 2, 3, 4, 5] print(isinstance(l, Iterable)) # True 而且每个可迭代器都有__iter__方法,并且此方法返回一个迭代器。 那么什么是迭代器呢?它与可迭代对象有什么关系?为什么for循环可以得出每人元素的值?那是因为可迭代对象有一个记录员,可记录当前位置。而这个记录员就是迭代器。可迭代对象可生成迭代器,如下: l = [1, 2, 3, 4, 5] it = iter(l) print(isinstance(it, Iterator)) # True 每个迭代器都有__next__方法。而生成器是迭代器的一种,除了有__next__方法以外,还要用到yield。 for循环的本质 其实for循环一个可迭代对象,为我们做了以下事情 1、通过可迭代对象生成一个迭代器 2、调用迭代器的__next__方法,生成值 3、遇到错误时,就退出 以下程序就说明了这个问题