可迭代物件,生成器,迭代器

2021-10-03 02:49:17 字數 2909 閱讀 9939

classa:

def__init__

(self)

: self.count=

10def

__iter__

(self)

:print

('執行 __iter__'

)return self

def__next__

(self)

:print

('執行 __next__'

)if self.count>0:

self.count-=

1return self.count

else

:print

('停止迭代'

)raise stopiteration

for i in a():

print

('i='

,i)#################################列印的結果

'''執行 __iter__ #先執行__iter__,返回乙個可迭代物件

執行 __next__

i= 9..

.執行 __next__

i= 1

執行 __next__

i= 0

執行 __next__

停止迭代

'''

class

fibonacciterator

(object):

def__init__

(self,n)

: self.n=n

self.current=

0 self.num1=

1 self.num2=

1def

__iter__

(self)

:return self

def__next__

(self)

:if self.current < self.n:

x=self.num1

self.num1,self.num2=self.num2,self.num1+self.num2

self.current +=

1return x

else

:raise stopiteration

def

foo():

print

(111

)yield

222#yield會讓出直譯器的控制權,掛起

print

(333

)yield

444print

(555

)n=foo(

)#含有yield就是乙個特殊的函式,僅僅是在封裝乙個生成器物件

#並不會執行任何結果

next

(n)#只有next呼叫才會有結果

x =next

(n)# 列印 111,返回 222

y =next

(n)# 列印 333,返回 444

z =next

(n)# 列印 555,丟擲 異常

練習:使用生成器實現斐波那契數列

def

gen_fib

(n):

num1=num2=

1 current=

0while current < n:

yield num1

num1,num2=num2,num1+num2

current+=

1f=gen_fib(12)

for i in f:

print

(i)

class

range

:def

__init__

(self, start, end=

none

, step=1)

:if end is

none

: self.start =

0 self.end = start

else

: self.start = start

self.end = end

self.step = step

def__iter__

(self)

:return self

def__next__

(self)

:if self.start < self.end:

current = self.start

self.start += self.step

return current

else

:raise stopiteration

for i in range(5)

:print

(i)for i in range(5,

10):print

(i)for i in range(10,

20,3)

:print

(i)

in [4]

: x=

range

(10000

)in [5]

: y=

[i for i in

range

(10000)]

#列表推導式

in [6]

:import sys

in [7]

: sys.getsizeof(x)

out[7]

:48in [8]

: sys.getsizeof(y)

out[8]

:87624

迭代器 可迭代物件 生成器

先上本文主題 迭代器一定是可迭代物件,可迭代物件不一定是迭代器 可迭代物件要滿足什麼條件才能使用 for 正確遍歷 生成器一定是迭代器.是否為迭代器 isinstance t,iterator 是否為可迭代物件 isinstance t,iterable 實現了 iter 魔法方法,就是可迭代物件....

迭代器和迭代物件 生成器

iterator 迭代器物件,必須要實現 next 魔法函式 iterable 可迭代物件,繼承 iterator,必須要實現 iter 魔法函式 迭代器 iterator 與可迭代物件 iterable 的區別 生成器生成器 函式中只要有 yield,這個函式就會變成生成器。每次執行到 yield...

可迭代物件 迭代器,生成器

可迭代物件 iterator 列表 集合 元組 字典 字串 生成器 我們可以使用isintance 判斷乙個物件是否是iterator物件 生成器 通過列表生成式,我們可以直接建立乙個列表,但是,受到記憶體限制,列表容量肯定是有限的,如果我們僅僅需要訪問前面幾個元素,如果列表元素可以按照某種演算法推...