我一直在阅读Iterators in the python 2.7.x Documentation
链接中给定的示例程序定义了一个__iter__
方法,使类"可迭代" 。
但是,我找不到在课堂上定义的__iter__
方法的任何用法,即说 - 即使我没有定义__iter__
,我仍然可以迭代该对象类。
代码1#来自文档
class Reverse:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def next(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
代码2#除了定义 iter 方法外,它是相同的。
class ReverseMod:
"""Iterator for looping over a sequence backwards."""
def __init__(self, data):
self.data = data
self.index = len(data)
# Missing __iter__()
def next(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
输出:
rev = Reverse('spam')
revMod = ReverseMod('spam')
rev.next() #m
rev.next() #a
rev.next() #p
...
revMod.next() #m
revMod.next() #a
revMod.next() #p
...
来自反向和 ReverseMod 的对象的行为方式相同。唯一的事情是当我做一个iter(revMod)它说
TypeError:迭代非序列
为什么我甚至需要关注自己做什么(revMod)?为什么我需要关心定义__iter__
。似乎我可以在不定义__iter__
的情况下获得执行 .next()的功能。