生成器
生成器就是只能迭代一次的迭代器,生成器的目的是优化内存资源。
# generator version
def fibon(n):
a = b = 1
for i in range(n):
yield a
a, b = b, a + b
![](https://img.haomeiwen.com/i2476123/3927e6c70339bc73.png)
#function return version
def fibon(n):
a = b = 1
result = []
for i in range(n):
result.append(a)
a, b = b, a + b
return result
![](https://img.haomeiwen.com/i2476123/9241286718daa40f.png)
对比返回生成器与直接用数组存储内存的占用差别
my_list = [1,2,3,4,5,6,7,8,9]
#without generator
def process_list(my_list):
for i in range(len(my_list)):
my_list[i] *= 2
return my_list
#with generator
def process_list_with_generaotr(my_list):
for i in range(len(my_list)):
yield my_list[i] * 2
print(process_list(my_list))
print(process_list_with_generaotr(my_list))
![](https://img.haomeiwen.com/i2476123/886bdbf59ea7eccd.png)
yield返回的是一个generator Object
def generator_function():
for i in range(3):
yield i
gen = generator_function()
print(next(gen))
# Output: 0
print(next(gen))
# Output: 1
print(next(gen))
# Output: 2
print(next(gen))
# Output: Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# StopIteration
只能迭代一次
网友评论