224 votes

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

J'ai essayé de trouver comment représenter un entier maximum, et j'ai lu qu'il fallait utiliser "sys.maxint" . Cependant, en Python 3, lorsque je l'appelle, j'obtiens :

AttributeError: module 'object' has no attribute 'maxint'

239voto

Diego Basch Points 5105

La constante sys.maxint a été supprimée, puisqu'il n'existe plus de limite à la valeur des entiers. Cependant, sys.maxsize peut être utilisé comme une constante entier plus grand que tout index pratique de liste ou de chaîne. Il est conforme à la taille "naturelle" des entiers de l'implémentation et est typiquement la même que que sys.maxint dans les versions précédentes sur la même plate-forme (en supposant que les mêmes options de compilation).

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

104voto

mwfearnley Points 242

Comme l'ont fait remarquer d'autres personnes, la version de Python 3 int n'a pas de taille maximale, mais si vous avez juste besoin de quelque chose qui est garanti d'être plus élevé que n'importe quelle autre int vous pouvez alors utiliser la valeur flottante pour Infinity, que vous pouvez obtenir avec float("inf") .

Note : comme le commentaire d'ely, cela peut avoir un impact sur l'efficacité de votre code, donc ce n'est peut-être pas la meilleure solution.

43voto

Vikrant Points 850

Si vous cherchez un chiffre qui soit plus grand que tous les autres :

Méthode 1 :

float('inf')

Méthode 2 :

import sys
max = sys.maxsize

Si vous cherchez un chiffre 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 dans Python2 et Python3. La méthode 2 fonctionne dans Python3. Je n'ai pas essayé la méthode 2 dans Python2.

32voto

gps Points 428

Les ints de 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 découvrir :

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

Si vous êtes curieux de connaître les détails de l'implémentation interne des objets int de Python 3, regardez à l'adresse suivante sys.int_info pour les détails sur les bits par chiffre et la taille des chiffres. Aucun programme normal ne devrait s'en préoccuper.

5voto

Cookiesfly Points 41

Python 3.0 n'a plus de sys.maxint car les ints de Python 3 sont de longueur arbitraire. longueur arbitraire. A la place de sys.maxint, il y a sys.maxsize ; la taille maximale maximum d'un size_t de taille positive, alias Py_ssize_t.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X