首頁  >  文章  >  後端開發  >  python迭代器和生成器區別

python迭代器和生成器區別

(*-*)浩
(*-*)浩原創
2019-06-22 16:12:173155瀏覽

迭代器是一個更抽象的概念,任何對象,如果它的類別有next 方法和iter 方法返回自己本身,對於string、list、dict、tuple 等這類容器對象,使用for 迴圈遍歷是很方便的。

python迭代器和生成器區別

在後台 for 語句對容器物件呼叫 iter()函數,iter()是 python 的內建函數。 iter()會傳回一個定義了 next()方法的迭代器對象,它在容器中逐一存取容器內元素,next() 也是 python 的內建函數。在沒有後續元素時,next()會拋出一個 StopIteration 異常。 (建議學習:Python影片教學

# 随便定义一个list
listArray=[1,2,3]
# 使用iter()函数
iterName=iter(listArray)
print(iterName)

產生器(Generator)是創建迭代器的簡單而強大的工具。它們寫起來就像是正規的函數,只是在需要傳回資料的時候使用 yield 語句。每次next()被呼叫時,生成器會傳回它脫離的位置(它記憶語句最後一次執行的位置和所有的資料值)

# 菲波那切数列
def Fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return '亲!没有数据了...'
# 调用方法,生成出10个数来
f=Fib(10)
# 使用一个循环捕获最后return 返回的值,保存在异常StopIteration的value中
while  True:
    try:
        x=next(f)
        print("f:",x)
    except StopIteration as e:
        print("生成器最后的返回值是:",e.value)
        break

##差異:

生成器能做到迭代器能做的所有事,而且因為自動創建了iter()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表達式取代列表解析可以同時節省記憶體。除了創建和保存程式狀態的自動方法,當發生器終結時,還會自動拋出 StopIteration 異常。

更多Python相關技術文章,請造訪

Python教學欄位學習!

以上是python迭代器和生成器區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn