erwit
erwit
1
Why is this code seriously flawed:

for element in collection:
element = None

o co tu chodzi? #python
  • Najlepsze
  • Wszystkie komentarze
Almagest
@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.
xaoc
xaoc
xaoc
1
@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.
Almagest
@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.
xaoc
xaoc
xaoc
0
@erwit: co znaczy seriously flawed?
erwit
erwit Autor
0
@xaoc: cos jest z nim bardzo nie tak, tylko nie rozumiem wlasnie o co chodzi. Kopia obiektu w petli wskazuje na null, dobrze rozumiem?
erwit
erwit Autor
0
xaoc
xaoc
xaoc
0
@erwit: żadna kopia. Referencja. To to samo co:

collection = None
erwit
erwit Autor
0
collection = [1, 2, 3, 4, 5]

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

print(collection)
xaoc
xaoc
xaoc
0
@Almagest: a da się tak dobrać do referencji?
erwit
erwit Autor
0
@Almagest: czyli podobnie jak ja nie widzisz niczego co mogloby byc nie tak w tym kodzie?
Almagest
@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.
meohaw
@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ć.
piotrb
@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