Python高階專題 可迭代物件協議以及迭代器

2021-10-08 15:19:41 字數 2436 閱讀 1575

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 這類語句...