擅长:python、mysql、java
<p>这段代码有很多问题,以及您对生成器如何工作以及它们的用途的理解都有问题。在</p>
<p>首先,对于您的<code>print</code>语句,这正是它应该打印的内容。生成器从不隐式扩展,因为不能保证生成器会终止。构造一个生成无止境序列的生成器是完全有效的,有时也是非常可取的。为了得到您想要的结果(我假设是生成类似于列表的输出),您可以:</p>
<pre><code>print(list(P(5))
</code></pre>
<p>但这又引出了我的第二点:生成器在序列中产生值(99%的用法都是这样,除非你把它作为协程函数使用)。您正试图使用生成器构造一个列表;但是,如果<code>n</code>不是<code>0</code>,那么这将永远不会产生值并立即返回。如果您的目标是构建一个生成器,该生成器生成一个给定长度的<code>1</code>的列表,那么它应该如下所示:</p>
^{pr2}$
<p>这将产生一个长度为<code>n</code>的序列。要获得列表表单,您需要做<code>list(P(n))</code>。在</p>
<p>{我建议你换一个更好的工具。在</p>