迭代器 導包 獲取 異常以及自定義「可迭代物件」

2021-10-24 11:35:27 字數 3245 閱讀 7155

如何判斷乙個物件是不是迭代器

isinstance

(資料, iterable)

導包
from collections.abc import iterable, iterator 導包
在物件中獲取迭代器或者獲取資料
# 迭代器只能獲取一次,要重新獲取乙個迭代器才能重新獲取資料

變數名 =

iter

(資料變數名)

print

(next

(變數名)

)# 第一次獲取

print

(next

(變數名)

)# 第二次獲取..

.print

(next

(變數名)

)# 第n次獲取

stopiteration異常

**示例:

from collections.abc import iterator

nums =[11

,22,33

,44]nums_iter =

iter

(nums)

print

("nums"

,isinstance

(nums, iterator)

)print

("nums_iter"

,isinstance

(nums_iter, iterator)

)num1 =

next

(nums_iter)

print

(num1)

num2 =

next

(nums_iter)

print

(num2)

num3 =

next

(nums_iter)

print

(num3)

num4 =

next

(nums_iter)

print

(num4)

num5 =

next

(nums_iter)

# 這裡會產生異常

print

(num5)

執行結果:

nums false

nums_iter true

1122

3344

traceback (most recent call last)

: file "c:/iterator.py"

, line 23,in

num5 =

next

(nums_iter)

# 這裡會產生異常

stopiteration

自定義「可迭代物件」

乙個類中有__iter__方法和__next__方法 就是乙個迭代器

**示例:

class

mylist

(object):

def__init__

(self)

: self.container =

defadd

(self, item)

:def

__iter__

(self)

:'''

只要乙個類 重寫了此方法就是乙個可迭代物件

返回乙個迭代器物件

注意傳入的self是mylist物件

:return:

'''return myiterator(self)

class

myiterator

(object):

''' 自定義乙個迭代器

實現 iter 和next方法的類 就可以例項化迭代器了

:param object:

:return:

'''def__init__

(self, mylist)

: self.mylist = mylist

# 獲取資料用的下標

self.current_indedx =

0def

__iter__

(self)

:return self

def__next__

(self)

:if self.current_indedx <

len(self.mylist.container)

:# 獲取當前資料

item = self.mylist.container[self.current_indedx]

# 獲取完資料後 下標+1

self.current_indedx +=

1# 資料返回

return item

else

:# 全部資料正常獲取完畢 這裡要丟擲異常

# 把下標設定為0 下次可以繼續獲取

self.current_indedx =

0raise stopiteration

mylist = mylist(

)# 新增資料

mylist.add(1)

mylist.add(2)

mylist.add(3)

mylist.add(4)

mylist.add(5)

mylist_iter =

iter

(mylist)

'''1 找到要遍歷的物件的迭代器

2 呼叫迭代器的next方法獲取資料

3 遇到stopiteration異常 停止迴圈

'''for num in mylist_iter:

print

(num)

print

('-----------------------------'

)# mylist_iter = iter(mylist)

for num in mylist_iter:

print

(num)

執行結果:

c:\python37\pythonw.exe "c:/自定義可迭代器.py"12

345-

----

----

----

----

----

----

----

1234

5process finished with exit code 0

Oracle在觸發器中自定義異常以及修改列的值

一 儲存過程的定義 1 過程 多次編譯 多次執行 過程實現計算器 declare p1 number 1 p2 number 2 sign varchar2 3 begin if sign then syso p1 p2 elsif sign then syso p1 p2 elsif sign t...

C 自定義迭代器

讓我們在示例中看乙個簡單迭代器型別的定義。我們定義乙個類模板,用來表示一段數值型別值,也可以生成指定範圍的開始和結束迭代器。這個迭代器也是模板型別,兩個模板都定義在同乙個標頭檔案 numeric range.h 中。下面是 numeric range模板的定義 template class nume...

無法獲取捕獲的自定義異常的自定義異常資訊

e.getmessage 讀取不到異常的資訊 restcontroller public class maincontroller catch exception e return new myresponse true,null,order 原因是我把異常提示資訊傳值給屬性errormessage...