python三大器之迭代器

2021-08-07 06:40:51 字數 2735 閱讀 7153

python中的三大器有迭代器,生成器,裝飾器,本文重點講解下迭代器

迭代器:具備了__next__和__iter__方法的物件

可迭代物件:具備了__iter__方法的物件

1.可迭代物件,可以通過for...in...這類語句迭代讀取一條資料供我們使用的物件稱之為可迭代物件(iterable),可以通過isinstance()判斷

in [1]: from collections import

iterable

in [2]: isinstance({},iterable)

out[2]: true

in [3]: isinstance((),iterable)

out[3]: true

in [4]: isinstance(""

,iterable)

out[4]: true

in [5]: for item in

{}: ...:

pass

...:

in [6]: for item in"":

...:

pass

...:

in [7]: for item in

(): ...:

pass

...:

2.for in的本質

li = [100, 200, 300, 400]

#for num in li:

#print(num)

#1. 通過呼叫可迭代物件的__iter__()獲取迭代器

#2. 對迭代器呼叫__next__進行迭代操作,

#如果沒有丟擲stopiteration異常,表示迭代沒有結束,把獲取到的資料元素放到變數中

#如果丟擲了異常,表示迭代結束,退出執行

#3. 執行迴圈體

#4. 跳轉到第2步執行

iterator = li.__iter__

()while

true:

try:

num = iterator.__next__

()

except

stopiteration:

break

else

:

print(num)

3.自定義迭代器

class

myiterable(object):

def__init__

(self):

self.container = # 定義乙個容器

defadd(self, item):

def__iter__

(self):

return

iterator(self.container) # 返回乙個迭代器

class

iterator(object):

def__init__

(self, container):

self.container =container

self.i =0

def__next__

(self):

if self.i count =self.i

self.i += 1

return

self.container[count]

else

:

raise

stopiteration

def__iter__

(self):

pass

mi =myiterable()

it = mi.__iter__

()mi.add(1)

mi.add(2)

mi.add(3)

for item in

mi:

print

(item)

from collections import

iterator

print(isinstance(it, iterator))

4.合併迭代器,python要求定義的迭代的迭代器必須實現__iter__(self),並且返回self。

通常,乙個可迭代物件物件的迭代器都是固定的,並且,類與類

之間需要距離性,物件之間需要相似性,所以通常可迭代物件

和迭代器寫在一起,就是下面的。

class

myiterable(object):

def__init__

(self):

self.container =

self.i =0

defadd(self, item):

def__next__

(self):

if self.i count =self.i

self.i += 1

return

self.container[count]

else

:

raise

stopiteration

def__iter__

(self):

return

self

mi =myiterable()

mi.add(1)

mi.add(2)

mi.add(3)

for item in

mi:

print(item)

Python三大器之生成器

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...

python基礎之三大器中迭代器和生成器

可迭代物件如何轉化成迭代器,並且取值 方法一 lst 1,2,3,4 l lst.iter print 1.next 1 print 1.next 2 print 1.next 3 print 1.next 4 方法二lst 1,2,3,4 l iter lst print next l 1 pri...

Python三大神器之 迭代器

迭代器定義 迭代器是乙個可以記住遍歷位置的物件 迭代器物件從第乙個元素開始訪問,直到所有的元素被訪問截止 迭代器只會向前,不能向後from collections import iterable class mylist object 這是自定義的列表類 def init self self.lis...