迭代器的作用

2021-10-24 08:53:11 字數 3402 閱讀 4333

迭代器1:

import time

class

classmates

(object):

def__init__

(self)

: self.names =

list()

defadd

(self, name)

:def

__iter__

(self)

:"""如果想要乙個物件成為乙個可以迭代的物件,即可以使用for,那麼必須實現__iter__方法"""

return classiterator(self)

class

classiterator

(object):

def__init__

(self, obj)

: self.obj = obj

self.current_num =

0def

__iter__

(self)

:pass

def__next__

(self)

:if self.current_num <

len(self.obj.names)

: ret = self.obj.names[self.current_num]

self.current_num +=

1return ret

else

:raise stopiteration

classmate = classmates(

)classmate.add(

"張三"

)classmate.add(

"李四"

)classmate.add(

"王五"

)"""迴圈遍歷乙個物件:

for name in classmate:

pass

這兩行**可以解讀為:

1.判斷classmate是否可以迭代

2.在第1步成立的前提下,自動呼叫iter函式,得到classmate物件的__iter__方法的返回值

3.__iter__方法的返回值是乙個迭代器

4.__iter__方法返回的是哪乙個物件的引用,就執行哪乙個物件對應的類中的__next__方法

"""for name in classmate:

print

(name)

time.sleep(

1)

迭代器2:

import time

class

classmate

(object):

def__init__

(self)

: self.names =

list()

self.current_num =

0def

add(self, name)

:def

__iter__

(self)

:return self

def__next__

(self)

:if self.current_num <

len(self.names)

: ret = self.names[self.current_num]

self.current_num +=

1return ret

else

:raise stopiteration

classmate = classmate(

)classmate.add(

"張三"

)classmate.add(

"老王"

)classmate.add(

"李四"

)"""

for name in classmate:

print(name)

解讀:1.先判斷classmate物件是否是可迭代物件(就看這個物件對應的類裡面有沒有__iter__方法)

2.如果是可迭代物件,自動呼叫iter函式進入到__iter__方法中,檢視__iter__方法的返回值

3.__iter__方法返回什麼(哪個物件),就執行它(哪個物件對應的類)下面的__next__方法**(這裡返回自身,就執行自己內部的__next__方法)

4.把__next__方法的返回值賦給name,此時name 就表示__next__方法的返回值

"""for name in classmate:

print

(name)

time.sleep(

1)

迭代器的作用(重點):

"""使用for...in 來遍歷fibonacci數列的前10個值

法一:使用列表先把斐波那契數列的前10個數存起來,再遍歷

**如下:

nums = list()

a = 0

b = 1

i = 0

while i < 10:

a, b = b, a + b

i += 1

for num in nums:

print(num)

法二:用迭代器實現,**如下

比較:使用列表的方式要先往列表中存入數,數值太多時會占用大量的儲存空間;

而使用迭代器的好處是 節省儲存空間,因為迭代器裡面儲存的是不是資料本身,而是生成資料的方法,

只占用生成資料方法的幾行**空間,所以占用記憶體少

"""class

fibonacci

(object):

def__init__

(self, all_num)

: self.all_num = all_num

self.current_num =

0 self.a =

0 self.b =

1def

__iter__

(self)

:return self

def__next__

(self)

:if self.current_num < self.all_num:

ret = self.a

self.a, self.b = self.b, self.a + self.b

self.current_num +=

1return ret

else

:raise stopiteration

if __name__ ==

"__main__"

: fibo = fibonacci(10)

for num in fibo:

print

(num)

迭代器的作用

迭代器就是把不同的資料結構 相同功能 的函式裝到乙個名字相同的函式裡,這樣的話你在寫演算法的時候就可以不管你要操作的資料結構的邏輯結構了。比如不管是鍊錶,陣列還是別的什麼,統一都用迭代器進行訪問的話可能都是 next 表示下乙個元素 pre 表示上乙個元素等等 其實意思就是,不管你用的是鍊錶,2叉樹...

STL中迭代器的作用,有指標為何還要迭代器

1 迭代器 iterator 迭代器 模式又稱cursor 游標 模式,用於提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。或者這樣說可能更容易理解 iterator模式是運用於聚合物件的一種模式,通過運用該模式,使得我們可以在不知道物件內部表示的情況下,按照一定順序 由i...

python迭代器的作用 python的迭代器

迭代是指能夠從序列中訪問出素的一種方式,在我們遍歷使用for.in.的物件都是可迭代物件。這裡需要補充一點的是python中一切都是物件。判斷乙個物件是否是可迭代物件可以通過instance函式 像我們常用的列表,字典,字串,集合,元組都是可迭代物件。那麼我們是否可以自定義乙個可迭代物件呢,答案是肯...