完善迭代器

2022-07-07 11:00:19 字數 3004 閱讀 7898

一、使用兩個物件建立乙個可被for迴圈遍歷的迭代器

1、要求:使用兩個物件自定義乙個可以被for迴圈遍歷的迭代器

2、注意事項:

a、demo類中的【__iter__】方法中返回的迭代器引用

並將當前類物件當作引數傳入到迭代器中。

作用:可將demo類中的資料引用傳入至classiterator類中使用。

b、classiterator類中的要定義乙個【__init__】方法,用於接收demo類傳入過來的引用。

c、為了能使用for迴圈正常遍歷,classiterator類中的【__next__】方法中、

需要使用if語句進行判斷是否下標越界。

d、最後要主動拋出stopiteration異常,用於for迴圈取值後停止遍歷。

e、示例

class

demo(object):

def__init__

(self):

self.names =list()

defadd(self, name):

def__iter__

(self):

return classiterator(self) #

返回乙個迭代器引用,並將obj當作引數傳遞

class

classiterator(object):

def__init__

(self, obj):

self.obj =obj

self.current_num = 0 #

設定下標的初始值

def__iter__

(self):

pass

def__next__

(self):

if self.current_num < len(self.obj.names): #

判斷是否下標越界

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

取值 self.current_num += 1 #

每取一次值,下標進行加1操作

return ret #

返回取到的值,可通過next函式或for迴圈遍歷取到值

else

:

raise stopiteration #

主動丟擲stopiteration異常

obj =demo()

#向列表中新增資料

obj.add("hw"

)obj.add(

"lhq")

obj.add("xz

")#使用for迴圈遍歷obj物件,進行取值。

for name in

obj:

print(name)

view code

執行結果:

hwlhq

xz二、使用乙個物件建立乙個可被for迴圈遍歷的迭代器(重點)

1、要求:使用乙個物件自定義乙個可以被for迴圈遍歷的迭代器

2、注意事項:

a、demo類中的【__iter__】方法中返回的迭代器引用中要傳入【self】。

作用:可將demo類中的資料引用傳入至classiterator類中使用。

b、classiterator類中的要定義乙個【__init__】方法,用於接收demo類傳入過來的引用。

c、為了能使用for迴圈正常遍歷,classiterator類中的【__next__】方法中、

需要使用if語句進行判斷是否下標越界。

d、最後要主動丟擲stopiteration異常,用於for迴圈取值後停止遍歷。

3、示例

class

demo(object):

def__init__

(self):

self.names =list()

self.current_num =0

defadd(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 += 1 #

每取一次值,下標進行加1操作

return ret #

返回取到的值,可通過next函式或for迴圈遍歷取到值

else

:

raise stopiteration #

主動丟擲stopiteration異常

obj =demo()

#向列表中新增資料

obj.add("hw"

)obj.add(

"lhq")

obj.add("xz

")#使用for迴圈遍歷obj物件,進行取值。

for name in

obj:

print(name)

view code

執行結果:

hwlhq

xz

Git 常用的命令(不斷迭代完善)

參考 一 git常見的指令 git配置使用者級別的config,一般是專案級的 不帶 global git config global user.name john doe git config list 刪除遠端倉庫,保留本地倉庫的目錄或者檔案 git rm r cached idea 刪除.id...

迭代器 反向迭代器

c primer 中文版第四版 第273頁 9.3.2 begin和end成員 begin和end操作產生指向容器內第乙個元素和最後乙個元素的下乙個位置的迭代器,如下所示。這兩個迭代器通常用於標記包含容器中所有元素的迭代範圍。c.begin 返回乙個迭代器,它指向容器c的第乙個元素 c.end 返回...

完善裝飾器函式

decorator可以動態實現函式功能的增加,但是,經過 decorator 改造 後的函式,和原函式相比,除了功能多一點外,有沒有其 它不同的地方?1 在沒有decorator的情況下,列印函式名 def f1 x pass print f1.name 輸出 2 有decorator的情況下,再列...