2016-03-31 6 views
0

Der Python2 Docs On Numeric Types Zustand, dassErkennung von impliziten Übergang vom Python Int (Unlimited) Lange

Plain ganze Zahlen (auch nur genannt ganzen Zahlen) implementiert sind lange in C, das sie mindestens 32 Bit Genauigkeit (sys gibt .maxint wird immer auf den maximalen reinen Ganzzahlwert für die aktuelle Plattform gesetzt, der Mindestwert ist -sys.maxint - 1). Lange ganze Zahlen haben unbegrenzte Präzision

Ich habe einige Code, der tut nicht-wissenschaftliche mathematische Operationen auf ganze Zahlen, und ist besorgt über implizite Konvertierungen von der früheren Art zu letzterem:

  1. vermutlich, die letzteren Typen sind viel weniger effizient als die ehemaligen
  2. noch wichtiger ist, wahrscheinlich ein Übergang in den letzteren (zumindest in meinem Code) bedeutet
  3. einige Fehler

Es ist möglich, pl ace Code nach jeder mathematischen Operation für die Art zu überprüfen, aber dies würde auch den Ausdruck

a * b + 2 * c * d 

in einen überladenen glob lesbaren Code machen.

Gibt es eine Möglichkeit, eine Ausnahme zu setzen, wenn eine Zahl zu groß für einen regulären int wird?

Antwort

1

Es gibt keine Möglichkeit, eine Ausnahme in den aktuellen Versionen von Python festzulegen. Die Python-Entwickler haben versucht, die Unterschiede zwischen den Typen int und long im Laufe der Zeit zu verbergen. In Python 3 ist der einzige Integertyp der unbegrenzte Genauigkeitstyp (obwohl er int heißt).

Sehr alte Versionen von Python (vor 2.2; circa 2001) haben den int-Typ nicht automatisch zum long-Typ hochgestuft. Eine Ausnahme wurde stattdessen ausgelöst. Leider verursachte dies mehr Fehler. Ich erinnere mich, dass ich Integer-Konstanten mit einem nachlaufenden L initialisieren musste, um unbegrenzte Präzisionsberechnungen zu erzwingen. Details siehe PEP 237.

+0

Vielen Dank für die Antwort. –