1. 程式人生 > >python 叠代器&&生成器

python 叠代器&&生成器

.html 一個 http 計算 存儲空間 生成式 方法 大量 www


有一篇文章寫得叠代器和生成器,寫得很好:https://www.cnblogs.com/wj-1314/p/8490822.html

#列表生成器
print([i*2 for i in range(10)])

#生成器:調用時才會產生相應的數據,不調用時不暫用內存,同時只記住當前的位置,只有一個__next__()方法
b=(i*2 for i in range(10))
for i in b:
print(i)

什麽是生成器?

  通過列表生成式,我們可以直接創建一個列表,但是,受到內存限制,列表容量肯定是有限的,而且創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。

  所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的list,從而節省大量的空間,在Python中,這種一邊循環一邊計算的機制,稱為生成器:generator

  生成器是一個特殊的程序,可以被用作控制循環的叠代行為,python中生成器是叠代器的一種,使用yield返回值函數,每次調用yield會暫停,而可以使用next()函數和send()函數恢復生成器。

  生成器類似於返回值為數組的一個函數,這個函數可以接受參數,可以被調用,但是,不同於一般的函數會一次性返回包括了所有數值的數組,生成器一次只能產生一個值,這樣消耗的內存數量將大大減小,而且允許調用函數可以很快的處理前幾個返回值,因此生成器看起來像是一個函數,但是表現得卻像是叠代器

什麽是叠代器?

  Iterable:直接作用於for循環的對象

  Iterator:可以被next()函數調用並不斷返回下一個值的對象稱為叠代器,叠代器可以通過iter()函數獲得一個Iterator對象

python 叠代器&&生成器