- for的本质是什么?
调用Iterable对象__iter__方法得到Iterator,然后不断调用__next__方法 - 什么是Iterable对象?
可以一次一个返回数据的Object,需要实现__iter__方法返回Iterator对象 - 什么是Iterator对象?
实现__iter__方法和__next__方法,(__iter__返回self即可) - Object.getitem(self,key)?
实现self[key]索引取值
class MyIterable():
def __init__(self):
self.data = [1,2,3,4,5]
def __iter__(self):
return MyIterator(self.data)
def __getitem__(self,idx):
return self.data[idx]
class MyIterator():
def __init__(self,data):
self.data = data
self.counter = 0
def __iter__(self):
return self
def __next__(self):
if self.counter>=len(self.data):
raise StopIteration()
data = self.data[self.counter]
self.counter += 1
return data
iter = MyIterable()
for i in iter:
print(i)
1
2
3
4
5
iter[2]
3