Python中的迭代器与可迭代:iter()和next()

Python09

Python中的迭代器与可迭代:iter()和next(),第1张

一种自动迭代的更优雅的实现是使用 for循环

在Python中,迭代器(Iterator)和可迭代(iterable)的区别是,迭代器支持 iter ()和 next ()方法;可迭代支持 iter ()方法。可迭代只能在for循环中获得元素,迭代器还可以用next()方法获取元素。

list/truple/map/dict都是可迭代,但不是迭代器;这些数据的大小是确定的;迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步。

凡是可以for循环的,都是Iterable

凡是可以next()的,都是Iterator

列表生成式,生成一个有5个元素的列表,5个元素的值是依次调用next(seq_num)5次得到的值。

seq_num是一个迭代器,next()方法作用于迭代器上返回迭代器中的下一个元素。对seq_num调用5次next()方法则返回迭代器中接下来的5个元素。

你用next(odd())多次调用,实际上每次都是创建一个新的引用,就相当于你每次都创建一个新的生成器,调用next取出的自然是第一次执行时返回的step1,1,每次执行后引用数就为0了,就在内存中销毁了,

只有创建一个生成器对象o后,能让生成器对象在内存有大于等于1的引用计数,不断执行next(o)输出step1,1step2,3,step3,5

完整的Python程序如下

def odd():

print('step 1')

yield 1

print('step 2')

yield(3)

print('step 3')

yield(5)

o=odd()

print(next(o))

print(next(o))

print(next(o))

源代码(注意源代码的缩进)