迭代器與生成器

2021-08-25 08:54:14 字數 1635 閱讀 7238

迭代器是乙個可以記住遍歷的位置的物件。

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

迭代器有兩個基本的方法:iter() 和 next()。

字串,列表或元組物件都可用於建立迭代器。

建立迭代器物件a=iter(集合)

import sys

a=iter("hello")

while

true:

try:

print(next (a))

except stopiteration:

sys.exit()

法二:用for(自動呼叫next)

a=iter("hello")

for i in iter(a):

print (i)

#之後再用for迴圈或next()都會出錯,iter已到最後乙個元素的位置

二.生成器

在 python 中,使用了 yield 的函式被稱為生成器(generator)。yield可大大節省記憶體

生成器是乙個返回迭代器的函式,只能用於迭代操作。 生成乙個 generator看起來像函式呼叫,但它不會執行任何函式**,直到呼叫next()(在 for 迴圈中會自動呼叫 next())才開始執行。

在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行next()時從當前位置繼續執行。

a,b=0,1

count=0

while countyield b

a,b=b,a+b

n-=1

f1=fab(3)

for i in f1:

print(i)

'''相當於print(next(f1))

print(next(f1))

print(next(f1))'''

作為生成器,因為每次迭代就會返回乙個值,所以不能顯示的在生成器函式中return 某個值,但是在函式中可以出現單獨的return,表示結束該語句。

通過固定長度的緩衝區不斷讀檔案,防止一次性讀取出現記憶體溢位的例子:

defread_file

(path):

size = 1024

with open(path,'r') as f: #with...as... 對物件執行__enter__(),__exit__()

while

true:

block = f.read(size)

if block:

yield block

else:

return

for i in block:

...

如乙個函式中出現多個yield則next()會停止在下乙個yield前

def

f():

yield

1yield

2yield

3a=f()

print(next(a))

print(next(a))

print(next(a))

迭代器與生成器

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

生成器與迭代器

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

生成器與迭代器

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