Ich bin wirklich fest, warum der folgende Codeblock 1 Ausgabe 1 anstelle von Ausgabe 2 führen?Python Scoping/Static Misunderstanding
-Code-Block 1:
class FruitContainer:
def __init__(self,arr=[]):
self.array = arr
def addTo(self,something):
self.array.append(something)
def __str__(self):
ret = "["
for item in self.array:
ret = "%s%s," % (ret,item)
return "%s]" % ret
arrayOfFruit = ['apple', 'banana', 'pear']
arrayOfFruitContainers = []
while len(arrayOfFruit) > 0:
tempFruit = arrayOfFruit.pop(0)
tempB = FruitContainer()
tempB.addTo(tempFruit)
arrayOfFruitContainers.append(tempB)
for container in arrayOfFruitContainers:
print container
**Output 1 (actual):**
[apple,banana,pear,]
[apple,banana,pear,]
[apple,banana,pear,]
**Output 2 (desired):**
[apple,]
[banana,]
[pear,]
Ziel dieses Code ist durch eine Anordnung und wickelt die jeweils in einem übergeordneten Objekt iterieren. Dies ist eine Reduzierung meines tatsächlichen Codes, der alle Äpfel zu einer Tüte Äpfel und so weiter hinzufügt. Meine Vermutung ist, dass es aus irgendeinem Grund entweder das gleiche Objekt verwendet oder so handelt, als ob der Fruchtcontainer ein statisches Array verwendet. Ich habe keine Ahnung, wie ich das beheben kann.
Keine Antwort auf Ihre Frage, aber auch bemerkenswert: "while len (arrayOfFruit)> 0:" ist äquivalent zu "while arrayOfFruit:".Letzteres ist zumindest dem Python Style Guide vorzuziehen. –