到底也是没懂它的具体原理,如:
- 百度说,生成器函数用来生成
生成器函数generator
包含 yield,用来生成一个特别长的序列的函数,可以在循环的过程中不断推算出后续的元素。这样就不必创建完整的list,从而节省大量的空间。
为什么要用生成器函数:
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
yield关键字
yield与return返回相同的值,
区别在于return返回后,函数状态终止,
而yield会保存当前函数的执行状态,在返回后,函数又回到之前保存的状态继续执行
使用__next__()来继续执行
以“斐波那契数列”为例
斐波那契数列 | 前两个数指明,之后第 i 个数,是第 i - 1 与第 i - 2 的和 |
---|
def f():
a, b = 1, 1
while True:
yield a
# yield(a) # 这样也可以
a, b = b, a + b
a = f()
for i in range(10): # 斐波那契数列中前10个元素
print(a.__next__(), end=' ')
print()
for i in range(10): # 斐波那契数列中前10个元素
print(a.__next__(), end=' ')