Python 生成器[序]
Python 摘要
利用2个具体的实列(有yield和没有yield的情况)对生成器进行比较
进而加深对生成器的理解:
实列 一
使用 yield
#!/usr/bin/python3
import sys
def fibonacci(n,w=0): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
print('%d,%d' % (a,b))
counter += 1
f = fibonacci(10,0) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except :
sys.exit()
——————————————————————————————————————————————————————————
#输出结果:
0 1,1
1 1,2
1 2,3
2 3,5
3 5,8
5 8,13
8 13,21
13 21,34
21 34,55
34 55,89
55 89,144
实列 二
不使用 yield
#!/usr/bin/python3
import sys
def fibonacci(n,w=0): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
#yield a
a, b = b, a + b
print('%d,%d' % (a,b))
counter += 1
f = fibonacci(10,0) # f 是一个迭代器,由生成器返回生成
while True:
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。