第二种:不使用 yield
#!/usr/bin/python3
import sys
def fibonacci(n,w=0):# 生成器函数 - 斐波那契
a, b, counter =0,1,0
whileTrue:
if(counter > n):
return
#yield a
a, b = b, a + b
print('%d,%d'%(a,b))
counter +=1
f = fibonacci(10,0)# f 是一个迭代器,由生成器返回生成
whileTrue:
try:
print(next(f),end=" ")
except:
sys.exit()
输出结果:
1,1
1,2
2,3
3,5
5,8
8,13
13,21
21,34
34,55
55,89
89,144
第二种没有yield时,函数只是简单执行,没有返回迭代器f。这里的迭代器可以用生成l列表来理解一下:
>>> l =[i for i in range(0,15)]
>>>print(l)
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
>>> m =(i for i in range(0,15))
>>>print(m)
<generator object at 0x104b6f258>
>>>for g in m:
... print(g,end=', ')
...
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,
这里的m就像上面的f一样,是迭代器。