1. 程式人生 > >python yield和generator

python yield和generator

def fab(max):
	n, a, b = 0, 0, 1
	while n < max:
		yield b
		# print b
		a, b = b, a + b
		n = n + 1

# for n in fab(5):
# 	print n

f = fab(5)
print f.next()
print f.next()
print f.next()
print f.next()
print f.next()
print f.next()

# 一個帶有 yield 的函式就是一個 generator,它和普通函式不同,生成一個 generator 看起來像函式呼叫,但不會執行任何函式程式碼,直到對其呼叫 next()(在 for 迴圈中會自動呼叫 next())才開始執行。雖然執行流程仍按函式的流程執行,但每執行到一個 yield 語句就會中斷,並返回一個迭代值,下次執行時從 yield 的下一個語句繼續執行。看起來就好像一個函式在正常執行的過程中被 yield 中斷了數次,每次中斷都會通過 yield 返回當前的迭代值。

# 參考 http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/
# 參考 http://www.cnblogs.com/tqsummer/archive/2010/12/27/1917927.html
# 參考 http://es6.ruanyifeng.com/#docs/generator