迭代器笔记:
什么是可迭代对象:
- 用来做什么的:用来给
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)