Was ist sys.maxint in Python 3?

161

Ich habe versucht herauszufinden, wie eine maximale Ganzzahl dargestellt werden kann, und ich habe gelesen, sie zu verwenden "sys.maxint". In Python 3 erhalte ich jedoch Folgendes, wenn ich es nenne:

AttributeError: module 'object' has no attribute 'maxint'
Ci3
quelle
Mögliches Duplikat der Maximal- und Minimalwerte für Ints
Georgy

Antworten:

171

Die Konstante sys.maxint wurde entfernt, da der Wert von Ganzzahlen nicht mehr begrenzt ist. Sys.maxsize kann jedoch als Ganzzahl verwendet werden, die größer ist als jede praktische Liste oder jeder Zeichenfolgenindex. Es entspricht der „natürlichen“ Ganzzahlgröße der Implementierung und entspricht normalerweise sys.maxint in früheren Versionen auf derselben Plattform (unter der Annahme derselben Erstellungsoptionen).

http://docs.python.org/3.1/whatsnew/3.0.html#integers

Diego Basch
quelle
79

Wie von anderen erwähnt, hat Python 3 intkeine maximale Größe. Wenn Sie jedoch nur etwas benötigen, das garantiert höher ist als jeder andere intWert, können Sie den Float-Wert für Infinity verwenden, den Sie erhalten können float("inf").

mwfearnley
quelle
Funktioniert auch mit Legacy-Python (2.7) - dies ist die richtige Antwort, wenn Sie eine Zahl zurückgeben müssen, die höher als alle möglichen realen Werte ist (z. B. zum Sortieren von Listen durch Vergleichen von Objekten)
Aaron D
3
Ein Nachteil dieses Ansatzes ist, dass float inf den Datentyp von Arrays ruinieren kann, wenn Sie versuchen, die JIT-Kompilierung mit Numba oder Cython oder ähnlichem anzuwenden. Möglicherweise benötigen Sie eine Python-Liste aller Ganzzahltypen, damit ein JIT-Compiler sie beispielsweise automatisch in den entsprechenden C-Typ konvertieren kann. Dies ist besonders wichtig für klassische Algorithmen, bei denen Sie möglicherweise JIT-Tools anwenden, um sie viel schneller als eine reine Python-Implementierung zu machen, die Implementierung jedoch zur Vereinfachung, zum Testen und zum Fallback in reines Python schreiben möchten, wenn der JIT-Compiler nicht in einer bereitgestellten Umgebung installiert ist usw.
ely
24

Python 3 Ints haben kein Maximum.

Wenn Sie die maximale Größe eines int in C bestimmen möchten, wenn es auf die gleiche Weise wie Python kompiliert wurde, können Sie das struct-Modul verwenden, um Folgendes herauszufinden:

>>> import struct
>>> platform_c_maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1

Wenn Sie neugierig auf die internen Implementierungsdetails von Python 3 int-Objekten sind, suchen Sie sys.int_infonach Details zu Bits pro Ziffer und Zifferngröße. Kein normales Programm sollte sich darum kümmern.

GPS
quelle
18

Wenn Sie nach einer Zahl suchen, die größer ist als alle anderen:

Methode 1:

float('inf')

Methode 2:

import sys
max = sys.maxsize

Wenn Sie nach einer Zahl suchen, die kleiner als alle anderen ist:

Methode 1:

float('-inf')

Methode 2:

import sys
min = -sys.maxsize - 1

Methode 1 funktioniert sowohl in Python2 als auch in Python3. Methode 2 funktioniert in Python3. Ich habe Methode 2 in Python2 nicht ausprobiert.

Vikrant
quelle
3

Python 3.0 hat kein sys.maxint mehr, da die Ints von Python 3 beliebig lang sind. Anstelle von sys.maxint hat es sys.maxsize; die maximale Größe einer positiven Größe size_t aka Py_ssize_t.

Cookiesfly
quelle
0

Eine Alternative ist

import math

... math.inf ...
Tom Verhoeff
quelle