안녕하세요. 저는 반복적 인 생성기를 사용하여 숫자의 고정 정수 파티션을 만들었습니다. 범위 지정 문제로 인해 혼란 스러웠습니다.파이썬 재귀 생성기의 범위
코드는이 스 니펫과 유사합니다.
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[:]
전달) 배열의 카피를 사용하여 정답을 얻을 수 있습니다하지만 난 여전히 위의 동작을 이해하지 않습니다. 인쇄 문과 산출 값이 다른 이유는 무엇입니까?
'a [i] + = n'은 확실히 배열을 변형시킵니다. –