<p>这实际上已经存在于<a href="https://docs.python.org/2/library/itertools.html#itertools.cycle" rel="nofollow noreferrer"><strong>^{<cd1>}</strong></a>中,例如:</p>
<pre><code>from itertools import cycle
for x in cycle(['a', 'b', 'c', 'd']):
print(x)
</code></pre>
<p>将不断重复元素。你知道吗</p>
<p>接下来,您将把iterable和迭代器混合起来,它们通常是不同的东西。你知道吗</p>
<p>作为一个iterable,我们可以继续从<code>self._circle</code>迭代:</p>
<pre><code>class SimpleCircle:
def __init__(self):
self._circle = ['a', 'b', 'c', 'd']
def __len__(self):
return len(self._circle)
def __iter__(self):
if not self._circle:
raise StopIteration
while True:
yield from self._circle</code></pre>
<p>或者对于迭代器:</p>
<pre><code>class CycleIterator:
def __init__(self, iterable):
self.iterator = iter(iterable)
self.__next__ = self._iternext
self.idx = 0
self.list = []
def _iternext(self):
try:
x = next(self.iterator)
self.list.append(x)
return x
except StopIteration:
self.__next__ = self._iterlist
return self._iterlist()
def _iterlist(self):
try:
return self.list[self.index]
except IndexError:
raise StopIteration
finally:
self.index = (self.index + 1) % len(self.list)</code></pre>