python3 叠代器與生成器
阿新 • • 發佈:2017-09-20
數列 div 保存 輸入 python 運行 結果 斐波那契數 pre
pythom3 叠代器與生成器
叠代器
‘‘‘
叠代器是python最強大的功能之一,是訪問集合元素的一種方式。
叠代器是一個可以記住遍歷的位置對象
叠代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問玩結束。叠代器只能往前不會後退。
叠代器有兩個基本方法:iter()和next().
字符串,列表或元組對象都可用於創建叠代器:
‘‘‘
list=[1,2,6,3] it=iter(list)#創建叠代器對象 print(next(it))#結果1 print(next(it))#結果2 print(next(it))#結果6 #根據上面的,就可以推斷打印一次就可以輸出叠代器的下一個元素 for i init:#利用for循環依次叠代輸出 print(i) #也可以使用next()函數 import sys #引入sys模塊 li=[1,2,365,9] ip=iter(li)#創建叠代器對象 while True: try: print(next(ip)) except StopIteration: sys.exit() #結果1,2,365,9
生成器yield
‘‘‘
在python中,使用了yield的函數被稱為生成器(generator)
跟普通函數不同的是,生成器是一個返回叠代器的函數,只能用於叠代操作,更簡單點理解生成器就是一個叠代器。
在調用生成器的運行過程中,每次遇到yield時函數會暫停並保存當前所有運行信息,返回yield的值。
並在下一次執行next()方法時從當前位置繼續運行
‘‘‘
#使用yield實現斐波那契數列 import sys def fibonacci(n):#生成函數 斐波那契 a,b,counter=0,1,0 print(‘a‘,a) while True: if(counter>n): return yield a a,b=b,a+b counter+=1 f=fibonacci(10)#f是一個叠代器由生成器生成 while True: try: print(next(f),end=‘ ‘) exceptStopIteration: sys.exit() #結果是0,1,1,2,3,5,8,13,21,34,55
總結;
什麽情況下需要使用yield
一個函數f,f返回一個list,這個list是動態計算出來的(不管是數學上的計算還是邏輯上的讀取格式化),
並且這個list會很大(無論是固定很大還是隨著輸入參數的增大而增大),這個時候,我們希望每次調用這個函數並使用叠代器進行
循環的時候一個一個的到每個list元素而不是直接得到一個完整的list來節省內存,這個時候yield就很有用。
python3 叠代器與生成器