迭代器與生成器

2022-08-09 22:39:15 字數 2004 閱讀 2165

迭代器(iterator)

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,迭代器不要求所有元素實現存在,

只有當迭代到某個元素的時候才使用該元素,這乙個特性非常適用於處理超大規模集合或者幾個g的檔案。

特點:

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

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

訪問到一半時不能往回退

便於迴圈比較大的資料集合,節省記憶體(linux的cat就是使用了迭代)

生成乙個迭代器

1 names = iter(['

alex

','alben

','jack'])

2print

(type(names))34

print(names.__next__

())5

print(names.__next__

())6

print(names.__next__())

在迭代的過程中,可以繼續給列表新增元素,已提供後續的迭代。

生成器(generator)

乙個函式呼叫時,返回乙個迭代器(iterator)這個函式就是乙個生成器,在函式中包含語法yield就是定義乙個生成器。

案例:

import

sysdef

read_file(file):

with open(file) as f:

for line in

f:

print

(line.strip())

yield

cat = read_file('

ethernet.txt')

print("

逐行讀取檔案內容,請根據需求退出")

while

true:

choose = input("

enter no to exit from the process: ")

if choose.upper() == 'no'

: exit()

else

: cat.

__next__()

view code

效果:

逐行讀取檔案內容,請根據需求退出

enter no to exit from the process:

0x0000 - 0x05dc ieee 802.3 長度

enter no to exit from the process:

0x0101 – 0x01ff 實驗

enter no to exit from the process:

0x0600 xerox ns idp

enter no to exit from the process:

0x0660

enter no to exit from the process: no

process finished with exit code 0

迭代器與生成器

可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...

生成器與迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

生成器與迭代器

通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...