Python基礎 迭代器和生成器

2021-09-13 19:55:37 字數 2212 閱讀 5800

迭代器用於:

直譯器需要迭代物件x時,會自動呼叫iter(x);

內建的iter函式,有以下功能:

檢查物件是否實現了 _iter _ 方法, 如果實現了就呼叫它,獲取乙個迭代器。

如果沒有實現 _iter _ 方法,但是實現了 _getitem _ 方法,python 會建立乙個迭代器,嘗試按順序(從索引 0 開始)獲取元素。

如果嘗試失敗,python丟擲typeerror異常,通常會提示"c objectis not iterable"(c 物件不可迭代),其中c是目標物件所屬的類。

__next__ #返回下乙個可用的元素,如果沒有元素了,丟擲stopiteration異常

__iter__ #返回self, 以便在應該使用可迭代物件的地方使用迭代器,例如在for迴圈中

import re

re_word = re.compile('\w+')

class sentence:

# 可迭代的物件

def __init__(self, text):

self.text = text

self.words = re_word.findall(text)

def __iter__(self): # 1

return sentenceiterator(self.words)

class sentenceiterator:

# 迭代器

def __init__(self, words):

self.words = words

self.index = 0

def __next__(self): # 2

try:

word = self.words[self.index]

except indexerror:

raise stopiteration()

self.index += 1

return word

def __iter__(self): # 3

return self

s = sentence('"the time has come," the walrus said,')

for word in s:

print(word)

--------------------

thetime

hascome

thewalrus

said

def gen_ab():

print('start')

yield 'a'

print('continue')

yield 'b'

print('end.')

print(gen_ab()) # 1

gen_ab() # 2

for item in gen_ab(): # 3

print('--->', item)

----------------

start

---> a

continue

---> b

end.

而是返回乙個生成器, 按需惰性生成元素。

def gen_ab():

print('start')

yield 'a'

print('continue')

yield 'b'

print('end.')

res1 = [x*3 for x in gen_ab()] # 1

for i in res1:

print('-->', i) # 2

res2 = (x*3 for x in gen_ab()) # 3

for i in res2:

print('--->', i)

----------------

start

continue

end.

--> aaa

--> bbb

start

---> aaa

continue

---> bbb

end.

流暢的python.

Python基礎 迭代器和生成器

一 可迭代物件 在python中,我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭...

Python基礎 迭代器和生成器

一 可迭代物件 在python中,我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭...

Python迭代器和生成器

先說迭代器,對於string list dict tuple等這類容器物件,使用for迴圈遍歷是很方便的。在後台for語句對容器物件呼叫iter 函式,iter 是python的內建函式。iter 會返回乙個定義了next 方法的迭代器物件,它在容器中逐個訪問容器內元素,next 也是python的...