如何判斷乙個物件是不是迭代器
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...