O que é sys.maxint no Python 3?


162

Eu tenho tentado descobrir como representar um número máximo máximo, e eu li para usar "sys.maxint". No entanto, no Python 3, quando eu o chamo, recebo:

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

Possível duplicata dos valores Máximo e Mínimo para ints
Georgy

Respostas:


172

A constante sys.maxint foi removida, pois não há mais um limite para o valor de números inteiros. No entanto, sys.maxsize pode ser usado como um número inteiro maior que qualquer lista prática ou índice de cadeias. Ele está de acordo com o tamanho inteiro "natural" da implementação e normalmente é o mesmo que sys.maxint em releases anteriores na mesma plataforma (assumindo as mesmas opções de compilação).

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


79

Conforme apontado por outros, o Python 3 intnão tem um tamanho máximo, mas se você precisar de algo com garantia de ser mais alto do que qualquer outro intvalor, poderá usar o valor flutuante para o Infinity, com o qual poderá obter float("inf").


Também funciona com o legado Python (2,7) - esta é a resposta correta quando você precisa retornar um número maior do que todos os valores reais possíveis (por exemplo, lista de classificação, comparando objetos)
Aaron D

3
Uma desvantagem dessa abordagem é que inf float pode arruinar o tipo de dados de matrizes se você estiver tentando aplicar a compilação jit com numba ou Cython ou similar. Você pode precisar de uma lista Python de todos os tipos inteiros, para que um compilador jit possa convertê-lo automaticamente no tipo c apropriado, por exemplo. Isso é especialmente crítico para algoritmos clássicos, nos quais você pode aplicar ferramentas jit para torná-las muito mais rápidas que uma implementação pura de Python, mas ainda deseja gravar a implementação em puro Python para conveniência, teste e fallback se o compilador jit não estiver instalado em um ambiente implementado , etc.
ely

24

Python 3 ints não tem um máximo.

Se seu objetivo é determinar o tamanho máximo de um int em C quando compilado da mesma forma que o Python, você pode usar o módulo struct para descobrir:

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

Se você estiver curioso sobre os detalhes de implementação interna dos objetos int do Python 3, procure sys.int_infopor bits por dígito e detalhes de tamanho de dígito. Nenhum programa normal deve se preocupar com isso.


18

Se você estiver procurando por um número maior que todos os outros:

Método 1:

float('inf')

Método 2:

import sys
max = sys.maxsize

Se você estiver procurando por um número menor que todos os outros:

Método 1:

float('-inf')

Método 2:

import sys
min = -sys.maxsize - 1

O método 1 funciona no Python2 e no Python3. O método 2 funciona em Python3. Eu não tentei o método 2 no Python2.


3

O Python 3.0 não possui mais o sys.maxint, já que as entradas do Python 3 são arbitrárias. Em vez de sys.maxint, ele possui sys.maxsize; o tamanho máximo de um tamanho positivo size_t aka Py_ssize_t.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.