Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

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() Methode
  • x.start, x.stop, x.step Attribute

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.


Quelle: https://github.com/python/peps/blob/main/peps/pep-0260.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT