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


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


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").


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.


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.


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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.