迭代器与生成器

Posted by LemonWhale on April 23, 2023

1. 迭代器

iter( )next( )

list = [1, 2, 3, 4]
it = iter(list)
for x in it:
    print(x)
print(next(it))  #迭代结束会输出StopIteration
import sys  #引入 sys 模块 
list=[1,2,3,4] 
it = iter(list)  #创建迭代器对象 
while True: 
	try: print (next(it)) 
except StopIteration:
	sys.exit()

2.生成器

使用了yield的函数被称为生成器(generator)

生成器 <generator object <genexpr> at 0x7faf6ee20a50>

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

import sys

def fibonacci(n):  #生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1

f = fibonacci(10)  #f是一个迭代器,由生成器返回生成
while True:
    try:
        print(next(f), end=" ")
    except StopIteration:
        sys.exit()

yield可以理解为一个断点,每到遇到就会中断然后返回值,然后继续,如此可以大大节省内存