回覆列表
-
1 # 高效碼農
-
2 # 斯溫醬
Python中生成器能做到迭代器能做的所有事,而且因為自動建立了__iter__()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表示式取代列表解析,同時節省記憶體。除了建立和保持程式狀態的自動生成,當發生器終結時,還會自動跑出StopIterration異常。
列表、元組、字典、字串都是可迭代物件。
數字、布林值都是不可迭代的。
下面分別來說說這兩者的具體區別:
1、迭代器
迭代器物件要求支援迭代器協議的物件。在Python中,支援迭代器協議就是實現物件的__iter__()和next()方法。其中__iter__()方法返回迭代器物件本身;next()方法返回容器的下一個元素,在結尾時引發StopIteration異常。
下面用個簡單的列表來說迭代器的用法:
看完上面程式碼,我想很多人納悶列表怎麼可以有一個迭代器。由於面試題篇幅有限,大家如果想了解可迭代物件怎麼可以獲取迭代器呢?
2、生成器
生成器(generator)就是一個函式,它提供了一種實現迭代器協議的便捷方式。生成器與普通函式的區別在於它包含 yield 表示式,並且不需要定義 __iter__()和__next__()。
生成器是一種惰性的序列,如果我們需要建立一個 0~1000000000 的序列,這樣大的序列創建出來會佔用比較多的記憶體,生成器就是為了解決這樣的問題 。
下面用個簡單的例子來說生成器的用法:
python迭代器是一種機制;列表是一種資料結構。
迭代模式提供一種順序訪問容器物件中各個元素的方法,而又不需要暴露該物件的內部實現。迭代器(Iterator)是按照一定的順序對一個或多個容器中的元素從前往後遍歷的一種機制,如對陣列的遍歷就是一種迭代遍歷。Python 是一種簡潔明瞭的語言,迭代器已經融入其語言本身的特性了,Python 中的 for 迴圈本身就是一個迭代的過程,也是最簡單易用的迭代方式。