<p>简而言之:<strong>没有</strong>,但还有其他形式的发电机。在</p>
<p><strong><code>for</code>/<code>while</code>循环是一个<em>循环结构</em></strong>:它不发出值,因此不是生成器。在</p>
<p>尽管如此,还有<strong>其他构造生成器的方法</strong>。在</p>
<p>例如,<strong><code>yield</code></strong>是一个生成器:</p>
<pre><code>def some_generator(xs):
for x in xs:
if x:
yield x
</code></pre>
<p>但也有<strong><em>生成器表达式</em></strong>,如:</p>
^{pr2}$
<p>此外,在<a href="/questions/tagged/python-3.x" class="post-tag" title="show questions tagged 'python-3.x'" rel="tag">python-3.x</a>中,<strong><code>range(..)</code>、<code>map(..)</code>、<code>filter(..)</code></strong>构造也是生成器。在</p>
<p>当然,您可以创建一个<strong><em>iterable</em></strong>(通过使用<em>iterable模式</em>):</p>
<pre><code>class some_generator(object):
def __init__(self, xs):
self.n = n
self.idx = 0
def __iter__(self):
return self
def __next__(self):
return self.next()
def next(self):
while self.num < len(self.xs) and not self.xs[self.num]:
self.num += 1
if self.num < len(self.xs):
res = self.xs[self.num]
self.num += 1
return res
else:
raise StopIteration()
</code></pre>