帶有 yield 的函數在 Python 中被稱之為 generator(生成器),何謂 generator ,通過下面的例子來說明。
1. 簡單輸出斐波那契數列前 N 個數 #!/usr/bin/python # -*- coding: UTF-8 -*- def fab(max): n, a, b = 0, 0, 1 while n < max: print b a, b = b, a + b n = n + 1 fab(5)
執行以上代碼,我們可以得到如下輸出:
1 1 2 3 5
2. 使用 yield 的版本
實例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def fab(max):
n, a, b = 0, 0, 1
while n < max:
yield b # 使用 yield
# print b
a, b = b, a + b
n = n + 1
for n in fab(5):
print n
僅僅把 print b 改為了 yield b,就在保持簡潔性的同時獲得了 iterable 的效果。
1 1 2 3 5
結論:yield 的作用就是把一個函數變成一個 generator,帶有 yield 的函數不再是一個普通函數,Python 解釋器會將其視為一個 generator,調用 fab(5) 不會執行 fab 函數,而是返回一個 iterable 對象!