# 此示例示意將自定義的類建立的物件製作成為可迭代物件
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迴圈的物件統稱為可...