1. 程式人生 > >python3 叠代器與生成器

python3 叠代器與生成器

數列 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 in
it:#利用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= )
    except
StopIteration: sys.exit() #結果是0,1,1,2,3,5,8,13,21,34,55

總結;

什麽情況下需要使用yield

    一個函數f,f返回一個list,這個list是動態計算出來的(不管是數學上的計算還是邏輯上的讀取格式化),

    並且這個list會很大(無論是固定很大還是隨著輸入參數的增大而增大),這個時候,我們希望每次調用這個函數並使用叠代器進行

    循環的時候一個一個的到每個list元素而不是直接得到一個完整的list來節省內存,這個時候yield就很有用。

python3 叠代器與生成器