class
demo
(object):
def__init__
(self,x)
: self.x = x
self.count =
0 例項化的計數man
def__iter__
(self)
:return self 返回例項化的可迭代物件
#for in 每一次都會呼叫__next__方法 獲取返回值
def__next__
(self)
: self.count+=
1if self.count<=self.x:
print
("我是count"
, self.count)
return self.count-
1else
:print
("我是count"
,self.count)
raise stopiteration#終止迭代器
d1 = demo(8)
# 只要重寫了 __iter__方法他就是可迭代物件 可以使用for in
test = d1.__iter__(
)# 這樣就獲取到物件的迭代器
迭代器生成斐波那契數列
class
fact
(object):
def__init__
(self,num:
int)
: self.num = num
self.num1 =
0 self.num2 =
1 self.count =
0def
__iter__
(self)
:return self
def__next__
(self)
: self.count +=
1if self.count <= self.num:
#x 存放最後的結果
x = self.num2
self.num1,self.num2 =self.num2,self.num1+self.num2
return x
else
:raise stopiteration
f = fact(10)
#佔時間 不佔空間
z =0
for i in f:
z = i
print
(z)print
(next
(iter
(z)) 等價於 print
((f.__iter__())
.__next__(
)) 這樣一次只能拿乙個值要拿多少個要寫多少次 占用空間不占用時間
yield i #將函式變成了生成器 本來我們的函式是用return 表示函式結束 但是現在通過yield
i +=
1
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...
迭代器和生成器
1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...
生成器和迭代器
1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...