ちょっと、私は再帰的ジェネレータを使って数値の固定整数パーティションを作成していましたが、スコープの問題で混乱しました。Python再帰的ジェネレータのスコープ
コードはこのスニペットに似ています。
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[:]
に渡す)配列のコピーを使用して正しい答えを得ることができますが、私はまだ上記の動作を理解していません。 印刷文と利回りの値が異なるのはなぜですか?
'[I] + = N 'は確か配列を変異させます。 –