1.迭代協議與可迭代物件
只有實現了迭代協議 __iter__才可以稱為可迭代物件
2.迭代器
訪問集合內元素的方式,用於遍歷資料,但是無法返回,提供了惰性訪問資料,同時實現了__iter__以及__next__協議
|--
|from collections.abc import iterable,iterator
# iterable : 可迭代物件繼承類
# iterator : 迭代器物件繼承類|-
-| iterable 原始碼
class
iterable
(metaclass=abcmeta)
: __slots__ =()
@abstractmethod
def__iter__
(self)
:while
false
:yield
none
@classmethod
def__subclasshook__
(cls, c)
:if cls is iterable:
return _check_methods(c,
"__iter__"
)return notimplemented
|--| iterator 原始碼
class
iterator
(iterable)
: __slots__ =()
@abstractmethod
def__next__
(self)
:'return the next item from the iterator. when exhausted, raise stopiteration'
raise stopiteration
def__iter__
(self)
:return self
@classmethod
def__subclasshook__
(cls, c)
:if cls is iterator:
return _check_methods(c,
'__iter__'
,'__next__'
)return notimplemented
3.定於可迭代物件class
itersequence
:def
__iter__
(self,):
pass
print
(isinstance
(itersequence(
),iterable)
)# true
print
(isinstance
(itersequence(
),iterator)
)# false
4.定義迭代器物件class
itersequence
:def
__iter__
(self,):
pass
def__next__
(self,):
pass
print
(isinstance
(itersequence(
),iterable)
)# true
print
(isinstance
(itersequence(
),iterator)
)#true
iter()方法
iter : 用於生成乙個迭代器,首先訪問iter, 如果沒有iter首先會建立乙個預設的迭代器會利用__getitem__遍歷
class
iteratorhandler()
:def
__init__
(self,sequence)
: self._sequence = sequence
# def __iter__(self):
# return ""
def__getitem__
(self, item)
:return self._sequence[item]
iteratorhandler = iteratorhandler(
["jasson"
,"jattor"
,"jassue"])
iter_iteratorhandler =
iter
(iteratorhandler)
for elem in iter_iteratorhandler :
print
(elem)
Python高階 可迭代物件和迭代器
collections模組 總結 1 list 列表 例如 執行結果 2 set 元組 例如 執行結果 3 tuple 集合 例如 執行結果 4 dict 字典 例如 執行結果 5 str 字串 例如 執行結果 6 generator 生成器 例如 執行結果 ps 生成器是典型的迭代器。能夠被nex...
Python 可迭代物件
1.可迭代物件 以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別 如 list tuple dict set str等 一類是generator,包括生成器和帶yield 的 generator function 這些可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 2...
python可迭代物件
0 在python中只要是能用for in的,都是可迭代物件,讓我們看下定義 定義 我們已經知道可以對list tuple dict set str等型別的資料使用for in 的迴圈語法,會從其中依次拿到資料元素進行使用,我們把這樣的過程稱為遍歷,也叫迭代。所以我們把可以通過for in 這類語句...