Qu'est-ce que sys.maxint dans Python 3?

162

J'ai essayé de savoir comment représenter un entier maximum, et j'ai lu pour l'utiliser "sys.maxint". Cependant, en Python 3, quand je l'appelle, j'obtiens:

AttributeError: module 'object' has no attribute 'maxint'
Ci3
la source
Reproduction possible des valeurs maximale et minimale pour les ints
Georgy

Réponses:

172

La constante sys.maxint a été supprimée, car il n'y a plus de limite à la valeur des entiers. Cependant, sys.maxsize peut être utilisé comme un entier plus grand que n'importe quelle liste pratique ou index de chaîne. Il est conforme à la taille entière «naturelle» de l'implémentation et est généralement identique à sys.maxint dans les versions précédentes sur la même plate-forme (en supposant les mêmes options de construction).

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

Diego Basch
la source
79

Comme d'autres l'ont souligné, Python 3 intn'a pas de taille maximale, mais si vous avez juste besoin de quelque chose qui est garanti supérieur à toute autre intvaleur, vous pouvez utiliser la valeur float pour Infinity, avec laquelle vous pouvez obtenir float("inf").

mwfearnley
la source
Fonctionne également avec l'héritage Python (2.7) - c'est la bonne réponse lorsque vous devez renvoyer un nombre supérieur à toutes les valeurs réelles possibles (par exemple pour le tri de liste en comparant des objets)
Aaron D
3
Un inconvénient de cette approche est que float inf peut ruiner le type de données des tableaux si vous essayez d'appliquer la compilation jit avec numba ou Cython ou similaire. Vous aurez peut-être besoin d'une liste Python de tous les types d'entiers pour qu'un compilateur jit puisse la convertir automatiquement en type c approprié, par exemple. Ceci est particulièrement critique pour les algorithmes classiques où vous pouvez appliquer des outils jit pour les rendre beaucoup plus rapides qu'une implémentation Python pure, mais que vous voulez toujours écrire l'implémentation en Python pur pour plus de commodité, de test, de secours si le compilateur jit n'est pas installé dans un environnement déployé , etc.
ely
24

Les entiers Python 3 n'ont pas de maximum.

Si votre objectif est de déterminer la taille maximale d'un int en C lorsqu'il est compilé de la même manière que Python, vous pouvez utiliser le module struct pour le savoir:

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

Si vous êtes curieux de connaître les détails d'implémentation interne des objets Python 3 int, recherchez les sys.int_infobits par chiffre et les détails de la taille des chiffres. Aucun programme normal ne devrait s'en soucier.

GPS
la source
18

Si vous recherchez un nombre plus grand que tous les autres:

Méthode 1:

float('inf')

Méthode 2:

import sys
max = sys.maxsize

Si vous recherchez un nombre plus petit que tous les autres:

Méthode 1:

float('-inf')

Méthode 2:

import sys
min = -sys.maxsize - 1

La méthode 1 fonctionne à la fois en Python2 et Python3. La méthode 2 fonctionne en Python3. Je n'ai pas essayé la méthode 2 en Python2.

Vikrant
la source
3

Python 3.0 n'a plus sys.maxint puisque les entiers de Python 3 sont de longueur arbitraire. Au lieu de sys.maxint, il a sys.maxsize; la taille maximale d'un size_t de taille positive aka Py_ssize_t.

Cookiesfly
la source
0

Une alternative est

import math

... math.inf ...
Tom Verhoeff
la source