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

Python Enhancement Proposals

PEP 240 – Hinzufügen eines rationalen Literals zu Python

Autor:
Christopher A. Craig <python-pep at ccraig.org>, Moshe Zadka <moshez at zadka.site.co.il>
Status:
Abgelehnt
Typ:
Standards Track
Erstellt:
11. März 2001
Python-Version:
2.2
Post-History:
16-Mär-2001

Inhaltsverzeichnis

Zusammenfassung

Eine andere PEP schlägt die Hinzufügung eines eingebauten rationalen Typs zu Python vor. Diese PEP schlägt vor, das ddd.ddd-Gleitkommaliteral in Python in eine rationale Zahl zu ändern und die nicht-ganzzahlige Division so zu modifizieren, dass sie diese zurückgibt.

BDFL-Verkündigung

Diese PEP wird abgelehnt. Die im Begründungsabschnitt dargelegten Bedürfnisse wurden bis zu einem gewissen Grad durch die Annahme von PEP 327 für die Dezimalarithmetik erfüllt. Guido bemerkte auch: "Rationale Arithmetik war die Standard-'exakte' Arithmetik in ABC und sie hat sich nicht wie erwartet entwickelt". Siehe die python-dev-Diskussion vom 17. Juni 2005 [1].

Begründung

Rationale Zahlen sind nützlich für exakte und überraschungsfreie Arithmetik. Sie liefern die korrekten Ergebnisse, die den Leuten in verschiedenen Mathematikklassen beigebracht wurden. Wenn der "offensichtliche" nicht-ganzzahlige Typ einer mit vorhersagbarerer Semantik verwendet wird, werden neue Programmierer weniger überrascht sein als bei der Verwendung von Gleitkommazahlen. Wie einige Beiträge auf c.l.py und auf tutor@python.org gezeigt haben, werden die Leute oft von der seltsamen Semantik von Gleitkommazahlen überrascht: Zum Beispiel liefert round(0.98, 2) immer noch 0.97999999999999998.

Vorschlag

Literale, die dem regulären Ausdruck '\d*.\d*' entsprechen, sind rationale Zahlen.

Abwärtskompatibilität

Das einzige abwärtskompatible Problem ist der Typ der oben genannten Literale. Die folgende Migration wird vorgeschlagen

  1. Das nächste Python nach der Genehmigung wird from __future__ import rational_literals zulassen, damit alle solchen Literale als rationale Zahlen behandelt werden.
  2. Python 3.0 wird eine standardmäßig aktivierte Warnung für solche Literale enthalten, wenn keine __future__-Anweisung vorhanden ist. Die Warnmeldung wird Informationen über die __future__-Anweisung enthalten und angeben, dass zur Erzielung von Gleitkommaliteralen diese mit "e0" ergänzt werden sollten.
  3. Python 3.1 wird die Warnung standardmäßig deaktiviert haben. Diese Warnung wird 24 Monate lang bestehen bleiben, danach werden die Literale rationale Zahlen sein und die Warnung wird entfernt.

Häufige Einwände

Rationale sind langsam und speicherintensiv! (Entspannen Sie sich, ich nehme die Floats nicht weg, ich füge nur zwei zusätzliche Zeichen hinzu. 1e0 wird immer noch ein Float sein)

Rationale müssen sich als Dezimal-Float präsentieren, sonst sind sie für Benutzer, die Dezimalzahlen erwarten, schrecklich (d.h. str(.5) sollte '.5' und nicht '1/2' zurückgeben). Das bedeutet, dass viele rationale Zahlen irgendwann abgeschnitten werden müssen, was zu einem neuen Präzisionsverlust führt.

Referenzen


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

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