首頁  >  文章  >  後端開發  >  python基礎之迭代器與生成器

python基礎之迭代器與生成器

高洛峰
高洛峰原創
2017-03-27 16:41:011929瀏覽

迭代器與生成器


1、迭代器

#1、迭代器

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

  2. #訪客不需要關心迭代器內部的結構,只需透過next()方法不斷去取下一個內容


##不能隨機存取集合中的某個值,只能從頭到尾依序存取

#進入一半時不能往回退


#可輕鬆迴圈比較大的資料集合,節省記憶體


>>> 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 += 1
obj = 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######### ###

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

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