生成器
生成器就是只能迭代一次的迭代器,生成器的目的是优化内存资源。
# generator version
def fibon(n):
a = b = 1
for i in range(n):
yield a
a, b = b, a + b

#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

对比返回生成器与直接用数组存储内存的占用差别
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))

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
只能迭代一次
网友评论