03 1 迭代器基本構造與優化

2021-10-01 03:18:33 字數 2083 閱讀 7097

基本構造1:

from collections import iterable

class

classmate

(object):

def__init__

(self)

: self.names =

list()

defadd

(self,name)

:def

__iter__

(self)

:# 1. 如果想要乙個物件成為乙個 可以迭代的物件,即可以使用for迴圈,那麼必須使用__iter__()這個方法實現

return demo(self)

# 2.在第1步成立的前提下,呼叫iter方法得到乙個***x.obj物件的__iter__方法的返回值

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

class

demo

(object):

def__init__

(self,obj)

: self.obj = obj

self.carren_num =

0def

__iter__

(self)

:pass

def__next__

(self)

:# 迭代時通過__next__取值

if self.carren_num <

len(self.obj.names)

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

self.carren_num +=

1return ret

else

:raise stopiteration

classmate = classmate(

)classmate.add(

"老王"

)classmate.add(

"李三"

)classmate.add(

"王五"

)for temp in classmate:

print

(temp)

# print(isinstance(classmate,iterable))

簡化構造:

from collections import iterable

class

classmate

(object):

def__init__

(self)

: self.names =

list()

self.carren_num =

0def

add(self,name)

:def

__iter__

(self)

:# 1. 如果想要乙個物件成為乙個 可以迭代的物件,即可以使用for迴圈,那麼必須使用__iter__()這個方法實現

# 2.在第1步成立的前提下,呼叫iter方法得到乙個***x.obj物件的__iter__方法的返回值

return self

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

def__next__

(self)

:# 迭代時通過__next__取值

if self.carren_num <

len(self.obj.names)

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

self.carren_num +=

1return ret

else

:raise stopiteration

classmate = classmate(

)classmate.add(

"老王"

)classmate.add(

"李三"

)classmate.add(

"王五"

)for temp in classmate:

print

(temp)

# print(isinstance(classmate,iterable))

Python 迭代物件與迭代器

可迭代物件 iterable 可以直接作用於for迴圈的物件統稱為可迭代物件。可以用isinstance 去判斷乙個物件是否是可迭代物件 iterable 可以直接作用於for的資料型別一般分兩種 1 集合資料型別,如list tuple dict set string 2 generator,包括...

例項構造器與型別構造器

例項構造器即例項建構函式,型別構造器也就是靜態建構函式.1 在例項構造器裡面,我們可以初始化類的例項欄位和靜態欄位.class test 2 在型別構造器裡面我們只能初始化靜態字段,其目的也在於此.class test 3 例項構造器和型別構造器觸發的條件不一樣.例項構造器是在乙個類的例項構造的時候...

python迭代器內部效率優化

做效率優化的時候get到了奇怪的姿勢 迭代器內部頻繁呼叫的資料最好與迭代主體在同一命名空間下 這能極大的提高迭代效率 原理尚未明確,懷疑是由於python在查詢變數時解引用的開銷造成的 coding utf8 class test loop def init self,n self.i 0 self...