python中的三大器有迭代器,生成器,裝飾器,本文重點講解下迭代器
迭代器:具備了__next__和__iter__方法的物件
可迭代物件:具備了__iter__方法的物件
1.可迭代物件,可以通過for...in...這類語句迭代讀取一條資料供我們使用的物件稱之為可迭代物件(iterable),可以通過isinstance()判斷
in [1]: from collections importiterable
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.自定義迭代器
classmyiterable(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:
(item)
from collections import
iterator
print(isinstance(it, iterator))
4.合併迭代器,python要求定義的迭代的迭代器必須實現__iter__(self),並且返回self。
通常,乙個可迭代物件物件的迭代器都是固定的,並且,類與類
之間需要距離性,物件之間需要相似性,所以通常可迭代物件
和迭代器寫在一起,就是下面的。
classmyiterable(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...