(Warning: off-topic post over Python syntax.)
De use case om a[i] te evalueren waarbij i een variabele met een negatieve waarde is, bestaat volgens mij niet (tegenvoorbeelden zijn welkom!) In de gevallen waarin i negatief is het minteken altijd al aanwezig in de broncode (in de vorm a[-1] of a[-i]).
In Python is a[i] eigenlijk syntactic sugar is voor a.__getitem__(i). Ik zou voorstellen om expressies van de vorm a[-i] op een speciale manier te parsen zodat ze vertaald worden naar a.__getitemreverse__(i) ofzoiets. Dan zou je ook direct vanaf 0 kunnen tellen zodat a[-0] het laatste element is (wat veel logischer is, want dan geldt: a[-x] == list(reversed(a))[x]).
Nu kun je zeggen dat het verwarrend is dat a[0] == a[(-0)] != a[-0]. Om die verwarring weg te nemen zou je ook nieuwe syntax als b.v. a[<i] of a[!i] kunnen introduceren. Dan is a[!0] + a[!1] dus b.v. de som van de laatste twee elementen. Dat heeft i.m.o. alle voordelen van het huidige systeem zonder enige van de nadelen.
Het is handig om van achter te kunnen indexeren, maar ik vind het een slechte keuze om daar negatieve indices voor te gebruiken, want nu krijg je wel een IndexError als je het bereik aan de rechterkant overschrijdt, maar niet als je het aan de linkerkant overschrijdt (en omgekeerd bij a[-i]) wanneer i negatief is). Daar komen alleen maar fouten van.DataGhost schreef op zondag 20 december 2020 @ 15:55:
Rechter edge:
code:
1 "".join([line[-1] for line in self.image])
Heerlijke feature
De use case om a[i] te evalueren waarbij i een variabele met een negatieve waarde is, bestaat volgens mij niet (tegenvoorbeelden zijn welkom!) In de gevallen waarin i negatief is het minteken altijd al aanwezig in de broncode (in de vorm a[-1] of a[-i]).
In Python is a[i] eigenlijk syntactic sugar is voor a.__getitem__(i). Ik zou voorstellen om expressies van de vorm a[-i] op een speciale manier te parsen zodat ze vertaald worden naar a.__getitemreverse__(i) ofzoiets. Dan zou je ook direct vanaf 0 kunnen tellen zodat a[-0] het laatste element is (wat veel logischer is, want dan geldt: a[-x] == list(reversed(a))[x]).
Python:
1
2
3
4
5
6
7
| a = [0,1,2] a[0] # OK, eerste element a[3] # IndexError a[-1] # IndexError a[-0] # OK, laatste element a[-(-1)] # IndexError a[-3] # IndexError |
Nu kun je zeggen dat het verwarrend is dat a[0] == a[(-0)] != a[-0]. Om die verwarring weg te nemen zou je ook nieuwe syntax als b.v. a[<i] of a[!i] kunnen introduceren. Dan is a[!0] + a[!1] dus b.v. de som van de laatste twee elementen. Dat heeft i.m.o. alle voordelen van het huidige systeem zonder enige van de nadelen.