Naprawdę utknąłem na tym, dlaczego poniższy blok kodu 1 powoduje wyjście 1 zamiast wyjścia 2?Python Scoping/Static Misunderstanding
blok kodowy 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,]
Celem tego kodu jest iterację tablicy i zawijać w każdy obiekt macierzystego. Jest to zmniejszenie mojego rzeczywistego kodu, który dodaje wszystkie jabłka do torby z jabłkami i tak dalej. Domyślam się, że z jakiegoś powodu używa tego samego obiektu lub działa tak, jakby pojemnik z owocami korzystał z tablicy statycznej. Nie mam pojęcia, jak to naprawić.
Nie jest to odpowiedź na twoje pytanie, ale także godne uwagi: "while len (arrayOfFruit)> 0:" jest równoważne "while while arrayOfFruit:".To ostatnie jest lepsze, przynajmniej według Python Style Guide. –