Wpis z mikrobloga

Why is this code seriously flawed:

for element in collection:
element = None

o co tu chodzi? #python
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@xaoc: cos jest z nim bardzo nie tak, tylko nie rozumiem wlasnie o co chodzi. Kopia obiektu w petli wskazuje na null, dobrze rozumiem?
  • Odpowiedz
collection = [1, 2, 3, 4, 5]

for element in collection:
element = None
print(element)

print(collection)
  • Odpowiedz
@erwit: Zmienna element w kolejnych obiegach pętli wskazuje na kolejne obiekty z collection. W każdym obiegu pętli jedyne co robimy, to nadpisujemy tę zmienną, by wskazywała na None. Ani kolekcja, ani żaden z elementów nie jest modyfikowany.
  • Odpowiedz
@erwit: On nic nie modyfikuje, ani nic nie zwraca. Trudno mi wyobrazić sobie sytuację, gdzie to byłoby zamierzone.

@xaoc: element to jest referencja. Ale element = None nie zmodyfikuje wskazywanego obiektu, tylko zmodyfikuje zmienną element, by wskazywała na wartość None.
  • Odpowiedz
@erwit: Nie robisz w tym kodzie nic tylko przysłaniasz zmienną element. Jest to po prostu bez sensu i tyle :)

Jakby tam był dalszy kod który spodziewa się, że element to jest faktyczna wartość z kolekcji, to nie będzie działać. Więc jak najbardziej takiej konstrukcji nie należy stosować.
  • Odpowiedz
@Almagest: No to słowo referencja chyba jest tu nieodpowiednie. Chyba że referencja w pythonie różni się od referencji w C++?

Ja bym w takim razie powiedział, że jest to wskaźnik. I wtedy by to miało dla mnie sens.
  • Odpowiedz
@xaoc: Tak, referencje w Pythonie różnią się od referencji i wskaźników w C++ i nie ma tu takiego pojęcia jak wskaźnik. Jeżeli przechodzisz z C++ to myśl o nich jak o wskaźnikach, których nie możesz do woli modyfikować np. dodając 1.
  • Odpowiedz
@erwit: Jako, że to jest pierwsze pytanie, to zakładam, że tylko o to, że kod nie ma efektu, jakiego ktoś mógłby się spodziewać.
Tylko, że to pytanie odsyła do kursu dla początkujących (jak się nie zna odpowiedzi) a totalnie początkujący po prostu tego nie zrozumie w ogóle. Natomiast ludzie, którzy przychodzą z innych języków muszą ogarnąć specyficzne rzeczy - w tym pytaniu mogą się zachować podobnie jak Ty.
Czyli raczej
  • Odpowiedz