def fib(n): one=0 two=1 while n>0: one,two=two,one+two n-=1 yield two print [i for i in fib(10)] print next(fib(10))
結果#
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
1
*****迭代海量數據時,顯然生成器更合適
什么是生成器
普通函數用 return 返回一個值,和 Java 等其他語言是一樣的,然而在 Python 中還有一種函數,用關鍵字 yield 來返回值,這種函數叫生成器函數,函數被調用時會返回一個生成器對象,生成器本質上還是一個迭代器,也是用在迭代操作中,因此它有和迭代器一樣的特性,唯一的區別在於實現方式上不一樣,后者更加簡潔。
生成器對象的行為和迭代器是非常相似的,可以用在 for 循環等場景中。注意 yield 對應的值在函數被調用時不會立刻返回,而是調用next方法時(本質上 for 循環也是調用 next 方法)才返回