PEP 260 – Vereinfachung von xrange()
- Autor:
- Guido van Rossum <guido at python.org>
- Status:
- Final
- Typ:
- Standards Track
- Erstellt:
- 26-Jun-2001
- Python-Version:
- 2.2
- Post-History:
- 26-Jun-2001
Inhaltsverzeichnis
Zusammenfassung
Dieser PEP schlägt vor, das xrange() Objekt von einigen selten genutzten Funktionalitäten wie x[i:j] und x*n zu befreien.
Problem
Die xrange() Funktion hat eine idiomatische Verwendung
for i in xrange(...): ...
Das xrange() Objekt hat jedoch eine Reihe von selten genutzten Funktionalitäten, die versuchen, es eher sequenzähnlich zu machen. Diese werden so selten genutzt, dass sie historisch ernste Fehler (z.B. Off-by-one-Fehler) hatten, die mehrere Releases lang unentdeckt blieben.
Ich behaupte, dass es besser ist, diese ungenutzten Features fallen zu lassen. Dies wird die Implementierung, Tests und Dokumentation vereinfachen und Wartung sowie Code-Größe reduzieren.
Vorgeschlagene Lösung
Ich schlage vor, das xrange() Objekt auf das absolute Minimum zu reduzieren. Die einzig beibehaltenen Sequenz-Verhaltensweisen sind x[i], len(x) und repr(x). Insbesondere werden folgende Verhaltensweisen fallen gelassen:
x[i:j](Slicing)x*n,n*x(Sequenz-Wiederholung)cmp(x1, x2)(Vergleiche)i in x(Containment-Test)x.tolist()Methodex.start,x.stop,x.stepAttribute
Ich schlage außerdem vor, die Signatur der PyRange_New() C API zu ändern, um das 4. Argument (die Wiederholungsanzahl) zu entfernen.
Durch die Implementierung eines benutzerdefinierten Iterator-Typs könnten wir die gängige Verwendung beschleunigen, aber dies ist optional (der Standard-Sequenz-Iterator ist völlig ausreichend).
Umfang
Dieser PEP betrifft die eingebaute Funktion xrange() und die PyRange_New() C API.
Risiken
Der Code von jemandem könnte sich auf die erweiterte Funktionalität stützen, und dieser Code würde brechen. Angesichts der Tatsache, dass Fehler in der erweiterten Funktionalität historisch so lange unentdeckt blieben, ist es jedoch unwahrscheinlich, dass viel Code betroffen ist.
Übergang
Zur Abwärtskompatibilität wird die bestehende Funktionalität in Python 2.2 weiterhin vorhanden sein, aber eine Warnung auslösen. Ein Jahr nach der Veröffentlichung von Python 2.2 Final (wahrscheinlich in 2.4) wird die Funktionalität entfernt.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0260.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT