python基礎之迭代器與產生器

來源:互聯網
上載者:User

迭代器與產生器

1、迭代器

迭代器是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可以不存在或者被銷毀。這個特點使得它特別適合用於遍曆一些巨大的或是無限的集合,比如幾個G的檔案

特點:

  1. 訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容

  2. 不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問

  3. 訪問到一半時不能往回退

  4. 便於迴圈比較大的資料集合,節省記憶體


>>> a = iter([1,2,3,4,5])>>> a<list_iterator object at 0x101402630>>>> a.__next__()1>>> a.__next__()2>>> a.__next__()3>>> a.__next__()4>>> a.__next__()5>>> a.__next__()Traceback (most recent call last):  File "<stdin>", line 1, in <module>StopIteration

2、產生器

一個函數調用時返回一個迭代器,那這個函數就叫做產生器(generator);如果函數中包含yield文法,那這個函數就會變成產生器;


def func():    yield 1    yield 2    yield 3    yield 4

上述代碼中:func是函數稱為產生器,當執行此函數func()時會得到一個迭代器。


>>> temp = func()>>> temp.__next__()1>>> temp.__next__()2>>> temp.__next__()3>>> temp.__next__()4>>> temp.__next__()Traceback (most recent call last):  File "<stdin>", line 1, in <module>StopIteration

3、執行個體

a、利用產生器自訂range


def xrange(n):       start = 0    print(start)    while True:        if start > n :            return        yield start        start += 1obj = xrange(4)n1 = obj.__next__()n2 = obj.__next__()n3 = obj.__next__()n4 = obj.__next__()n5 = obj.__next__()n6 = obj.__next__()print(n1,n2,n3,n4,n5,n6)

b、利用迭代器訪問range

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.