假设现在我们需要打印0~10000,可以想到使用for..in循环:
n = [i for i in range(0, 1001)]
for i in n:
print(i)
但这样很消耗计算机的内存,因为数字是储存在列表n里的。
我们用一个函数解决:
def gen(max):
n = 0
while n<= max:
print(n)
n+=1
gen(10000)
这样便解决了性能问题。但假如我们并非只是打印数字,而是需要对其中的数字进行操作该怎么做?
def gen(max):
n = 0
while n<= max:
n+=1
return n
gen(10000)
这样只打印一次。return后便不会再执行第二次,但如果是生成器yield:
def gen(max):
n = 0
while n<= max:
n+=1
yield n
g = gen(10000)
生成器我们可以使用next(g)去调用它,每调用一次next(),就返回一次调用结果。也可以使用for in循环:
for i in g:
print(i)
print(g)
>><generator obj>
这样既保存了通用性,同时解决了性能的问题。yield返回一次,下一次的返回会从上次的返回结果开始进行。