迭代器(高階)

2021-08-26 11:52:54 字數 1527 閱讀 2900

# 此示例示意將自定義的類建立的物件製作成為可迭代物件

class

mylist

():'''這是乙個自定義的列表型別,此型別的物件是

用data屬性繫結的列表來儲存資料'''

def__init__

(self, iterable=()):

self.data = [x for x in iterable]

def__repr__

(self):

return

'mylist(%s)' % self.data

# myl = mylist([2, 3, 5, 7])

# for x in myl:

# print(x) # 報錯,這個不是可迭代物件

# typeerror: 'mylist' object is not iterable

print('--------修改為----------------------------')

class

mylist

():'''這是乙個自定義的列表型別,此型別的物件是

用data屬性繫結的列表來儲存資料'''

def__init__

(self, iterable=()):

self.data = [x for x in iterable]

def__repr__

(self):

return

'mylist(%s)' % self.data

def__iter__

(self):

'''此方法用於返回乙個能訪問self物件的迭代器'''

print('__iter__() 方法被呼叫') # 除錯用, 此方法僅會被一次用

return mylistiterator(self.data)

class

mylistiterator:

'''寫乙個類,專門用來描述能夠訪問mylist型別物件的迭代器'''

def__init__

(self, lst):

self.data_lst = lst

self.cur_index = 0

# 迭代器訪問的其實位置

def__next__

(self):

'''此方法用來實現迭代器協議'''

if self.cur_index >= len(self.data_lst):

raise stopiteration

r = self.data_lst[self.cur_index]

self.cur_index += 1

return r

myl = mylist([2, 3, 5, 7])

it = iter(myl) # 等同於呼叫 it = myl.__iter__()

print(next(it)) # 2

print(next(it)) # 3

for x in myl:

print(x)

python迭代器高階

我們之前簡單的了解了一下迭代器,本篇,我們來看看迭代器具體的使用方法吧!lst 1 2,3 4 import dis 引入標準庫dis,用它觀察for迴圈的細節。dis.dis for i in lst pass 1 0 setup loop 12 to 14 2 load name 0 lst 4...

python高階特性 迭代器

本文 廖雪峰的官方 我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 ite...

python 函式高階 迭代器

迭代 可以理解成迴圈,迭代一次,迴圈一次 根據所學知識我們知道,直接作用於for迴圈的資料型別有 一是集合資料型別,如str list,tuple,dict,set等 一類是generator,如,生成器和帶yield的generator function 這些可以直接作用於for迴圈的物件統稱為可...