基本構造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...