<p>我使用的是Python 3.4.*并尝试执行以下代码:</p>
<pre><code>def P(n):
if n == 0:
yield []
return
for p in P(n-1):
p.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(1)
yield p
p.pop()
if p and (len(p) < 2 or p[-2] > p[-1]):
p[-1] += 1
yield p
print(P(5)) # this line doesn't make sense
for i in P(5): # but this line does make sense thanks to furkle
print(i)
</code></pre>
<p>但是我得到的是<code><generator object P at 0x02DAC198></code>,而不是输出。在</p>
<p>有人能解释一下我的代码在哪里需要修正吗?我不认为py喜欢函数名P,但我可能错了。在</p>
<p>编辑:furkle澄清了<code><generator object P at 0x02DAC198></code>。在</p>
<p>顺便说一句,我现在正在写我自己修改的配分函数,我试图理解这个与经典设置相对应的配分函数。在</p>
<p>我想你误解了发电机的概念。生成器对象类似于一个列表,但是您可以懒洋洋地迭代其结果,而不必等待整个列表的构造。对返回生成器的函数调用操作不会对生成器生成的每个项按顺序执行该操作。在</p>
<p>如果要打印p(5)的所有输出,则应写下:</p>
<pre><code>for i in P(5):
print(i)
</code></pre>
<p>如果您只想打印生成器返回的内容的列表,这在很大程度上似乎违背了生成器的用途。在</p>