標籤:strong next 執行個體 python 判斷 之一 exit gen cep
迭代器與產生器
迭代器
迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍曆的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。
字串,列表或元組對象都可用於建立迭代器:
兩個執行個體
list = [1,2,3,4]it = iter(list) for x in it: print (x, end=" ")
import sys list = [1,2,3,4]it = iter(list) while True: try: print (next(it)) except StopIteration: sys.exit()
產生器
在 Python 中,使用了 yield 的函數被稱為產生器(generator)。
跟普通函數不同的是,產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。
在調用產生器啟動並執行過程中,每次遇到 yield 時函數會暫停並儲存當前所有的運行資訊,返回 yield 的值,
並在下一次執行 next() 方法時從當前位置繼續運行。
調用一個產生器函數,返回的是一個迭代器對象。
簡而言之,遇到yield暫停,下次調用時從當前位置繼續
兩個執行個體
-- 斐波拉契數列
def fibonacci(n): # 產生器函數 - 斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b counter += 1f = fibonacci(10) # f 是一個迭代器,由產生器返回產生while True: try: print(next(f), end=" ") except StopIteration: sys.exit()
-- 判斷質數
import sysimport mathdef tem(n) : for t in range(2,n) : for x in range(2,int(math.sqrt(t)) + 1) : if t % x == 0 : break; else : yield tf = tem(100)while 1 : try : print(next(f),end = ‘ ‘) except StopIteration : sys.exit()
參考資料
http://www.runoob.com/python3/python3-function.html
Python入門 (三)