【发布时间】:2010-10-25 10:38:25
【问题描述】:
大家好,我正在使用递归生成器来创建数字的固定整数分区,但我对范围问题感到困惑。
代码类似于这个sn-p。
def testGen(a,n):
if n <= 1:
print('yield', a)
yield a
else:
for i in range(2):
a[i] += n
for j in testGen(a,n-i-1):
yield j
我的困惑如下图。
>>> list(testGen([1,2],4))
yield [10, 2]
yield [10, 4]
yield [10, 7]
yield [12, 11]
yield [12, 13]
[[12, 13], [12, 13], [12, 13], [12, 13], [12, 13]]
我可以通过使用数组的副本来获得正确的答案(例如,将a[:] 传递给递归调用)但我仍然不明白上述行为。
为什么 print 语句和 yield 值不一样?
【问题讨论】:
标签: python recursion scope generator