Hallo zusammen, ich arbeitete an einem rekursiven Generator, um die festen ganzzahligen Partitionen einer Zahl zu erstellen, und ich war verwirrt durch ein Problem mit dem Umfang.Umfang der rekursiven Python-Generatoren
Der Code ist diesem Snippet ähnlich.
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
Meine Verwirrung ist unten dargestellt.
>>> 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]]
Ich kann einfach die richtige Antwort erhalten, indem eine Kopie des Arrays (z.B. in a[:]
zum rekursiven Aufruf geht), aber ich immer noch nicht das oben beschriebene Verhalten verstehen. Warum unterscheiden sich Druckanweisungen und Ertragswerte?
'a [i] + = n 'mutiert sicherlich das Array. –