Du meinst weil ab einer bestimmten Größe von "normalen" Ints nach PythonInts (die mit L hinten) gearbeitet wird.Sirius3 hat geschrieben:... Zeile 10 funktioniert bei CPython zufällig für kleine Zahlen, bei größeren aber schon nicht mehr.
Daran habe ich garnicht gedacht. Das muss ich mir allgemein merken als Best Practice...
Kannst du dazu vielleicht nochmal was sagen damit ich's besser verstehe? Mich wundert es ein bischen.Sirius3 hat geschrieben:Die Vergleiche in Zeile 10, 14 und 16 sind sowieso überflüssig, da die while-Schleife für diese Fälle 0 mal durchlaufen wird. Wenn Du den Defaultwert von step auf 1 setzt sind Zeile 8 und 9 auch unnötig.
Richtig. Weil ich zuerst die obere Codehälfte geschrieben habe und mir dann "mittendrin" die Idee mit der Trennung der Funktionen kam (eine Generator-Funktion und eine die immer fertige Listen zurückgibt).Sirius3 hat geschrieben:Warum machst Du überhaupt eine innere Funktion. Hättest Du yield auf der obersten Ebene, wäre das Leerer-Generator-Problem erst gar nicht aufgetreten
Und ja, dein Code ist deutlich besser. Ich hab mich schon gewundert, ob das sein kann, dass das range() so kompliziert ist und so viele versch. Fallunterscheidungen braucht, kann ja nicht sein...
...nur leider wars nicht so klar.
EDIT:
@BJ
Oh mann, hinterher denk ich immer, hättest dir das auch selber denken können. Das mit (...) statt iter(...).
Also bisher scheint wohl (_ for _ in []) die kürzeste(, leere) Generator-Expression zu sein, wenn das niemand nochmals unterbietet.
Ich muss mir echt ein eigenes Python Cheat-Sheet bauen, um all diese ganzen kleinen "basics" immer auf einen Blick zu haben.