迭代器筆記:
什麼是可迭代對象:
- 用來做什麼的:用來給
for...in...
遍歷的。 - 已知的數據類型:
list
、dict
、tuple
、str
、set
、生成器。 - 需要滿足的條件:需要實現一個
__iter__
的方法,並且這個方法要返回一個迭代器對象。
什麼是迭代器:
- 用來做什麼的:用來返回數據的,每次循環的時候都會調用迭代器的
__next__
或者next
函數,通過這個方法來獲取數據 - 需要滿足的條件:
- 在
Python2
中:要實現兩個方法,分別是__iter__
方法和next
方法。 - 在
Python3
中:要實現兩個方法,分別是__iter__
方法和__next__
方法。
- 在
iter函數:
用來獲取一個可迭代對象的迭代器。
自己動手寫一個可以用for...in...
遍歷的結構:
class MyRangeIterator(object):
def __init__(self,start,end):
self.index = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.index < self.end:
temp = self.index
self.index += 1
return temp
else:
raise StopIteration()
class MyRange(object):
"""
MyRange是可迭代對象
"""
def __init__(self,start,end):
self.start = start
self.end = end
def __iter__(self):
# 這個方法中要返回一個迭代器對象
return MyRangeIterator(self.start,self.end)
ret = MyRange(1,10)
for x in ret:
print(x)
如果將迭代器和可迭代對象兩個身份都放在同一個對象中,那麼這時候,這個可迭代對象就只能遍歷一次:
class MyRange(object):
"""
MyRange是可迭代對象
"""
def __init__(self,start,end):
self.start = start
self.end = end
self.index = start
def __iter__(self):
# 這個方法中要返回一個迭代器對象
return self
def __next__(self):
if self.index < self.end:
temp = self.index
self.index += 1
return temp
else:
raise StopIteration()
my_range = MyRange(1,10)
for x in my_range:
print(x)
print('='*10)
for y in my_range:
print(y)