PEP 313 – Hinzufügen von römischen Zahl-Literalen zu Python
- Autor:
- Mike Meyer <mwm at mired.org>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 01-Apr-2003
- Python-Version:
- 2.4
- Post-History:
Zusammenfassung
Diese PEP (auch bekannt als PEP CCCXIII) schlägt die Aufnahme von römischen Ziffern als Literaltyp vor. Sie schlägt außerdem die neue eingebaute Funktion „roman“ vor, die ein Objekt in eine Ganzzahl umwandelt und dann die Ganzzahl in eine Zeichenkette umwandelt, die das römische Zahl-Literal-Äquivalent zur Ganzzahl ist.
BDFL-Verkündigung
Diese PEP wird abgelehnt. Während die Mehrheit der Python-Benutzer dies als wünschenswerte Funktion ansah, konnte die Community keinen Konsens darüber erzielen, ob neun als IX, die moderne Form, oder VIIII, die klassische Form, dargestellt werden sollte. Ebenso wurde keine Einigung darüber erzielt, ob MXM oder MCMXC als wohlgeformte Darstellung von 1990 angesehen werden sollte. Eine lautstarke Minderheit von Benutzern hat auch die Unterstützung für Kleinbuchstaben-Ziffern für die Verwendung in (i) PowerPoint-Folien, (ii) akademischen Arbeiten und (iii) Perl-Dokumentationen gefordert.
Begründung
Römische Ziffern werden in einer Reihe von Bereichen verwendet, und ihre Aufnahme in Python als Literale würde Berechnungen in diesen Bereichen erleichtern. Beispielsweise werden Super Bowls mit römischen Ziffern gezählt, und viele ältere Filme haben Copyright-Daten in römischen Ziffern. Darüber hinaus bietet LISP ein Paket für römische Zahl-Literale, sodass die Aufnahme von römischen Ziffern in Python dazu beitragen wird, die LISP-Neid zu lindern, die manchmal in comp.lang.python zu sehen ist. Außerdem hält der Autor dies für den einfachsten Weg, seinen Namen auf einer PEP zu verewigen.
Syntax für römische Literale
Römische Zahl-Literale bestehen aus den Zeichen M, D, C, L, X, V und I und nur diesen Zeichen. Sie müssen in Großbuchstaben vorliegen und eine Ganzzahl gemäß den folgenden Regeln darstellen
- Sofern nicht anders angegeben, müssen sie in der Reihenfolge M, D, C, L, X, V und dann I erscheinen. Jede einzelne Ziffer jedes Zeichens addiert 1000, 500, 100, 50, 10, 5 bzw. 1 zum Wert des Literals.
- Nur ein D, V oder L darf in einem gegebenen Literal vorkommen.
- Es dürfen höchstens drei Is, Xs und Cs hintereinander in einem gegebenen Literal erscheinen.
- Ein einzelnes I kann unmittelbar links von der einzelnen V erscheinen, gefolgt von keinem I, und addiert 4 zum Wert des Literals.
- Ein einzelnes I kann ebenfalls vor dem letzten X erscheinen, gefolgt von keinem I oder V, und addiert 9 zum Wert.
- X verhält sich zu L und C wie I zu V und X, außer dass die Werte 40 bzw. 90 sind.
- C verhält sich zu D und M wie I zu V und X, außer dass die Werte 400 bzw. 900 sind.
Jedes Literal, das ausschließlich aus den Zeichen M, D, C, L, X, V und I besteht und nicht diesem Format folgt, löst einen Syntaxfehler aus, da explizit besser ist als implizit.
Eingebaute Funktion „roman“
Die neue eingebaute Funktion „roman“ wird die Übersetzung von Ganzzahlen in römische Zahl-Literale unterstützen. Sie nimmt ein einzelnes Objekt als Argument entgegen und gibt eine Zeichenkette zurück, die das Literal mit demselben Wert enthält. Wenn das Argument keine Ganzzahl oder keine rationale Zahl ist (siehe PEP 239), wird es über die vorhandene eingebaute Funktion „int“ weitergeleitet, um den Wert zu erhalten. Dies kann zu Informationsverlust führen, wenn das Objekt eine Gleitkommazahl war. Wenn das Objekt rational ist, wird das Ergebnis als rationales Literal formatiert (siehe PEP 240), wobei die Ganzzahlen in der Zeichenkette römische Zahl-Literale sind.
Kompatibilitätsprobleme
Durch diesen Vorschlag werden keine neuen Schlüsselwörter eingeführt. Programme, die Variablennamen verwenden, die ausschließlich Großbuchstaben enthalten und nur die Zeichen M, D, C, L, X, V und I enthalten, werden von den neuen Literalen betroffen sein. Diese Programme erhalten nun Syntaxfehler, wenn diese Variablen zugewiesen werden, und entweder Syntaxfehler oder subtile Fehler, wenn diese Variablen in Ausdrücken referenziert werden. Da solche Variablennamen gegen PEP 8 verstoßen, ist der Code bereits fehlerhaft, er hat nur noch keine Ausnahmen ausgelöst. Dieser Vorschlag korrigiert diese Lücke in der Sprache.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0313.rst
Zuletzt geändert: 2025-02-01 08:59:27 GMT