Python: valores Max e Min utilizáveis
O Python 2.x permite que tipos heterogêneos sejam comparados.
Um atalho útil (no Python 2.7 aqui) é queNone
compara menor que qualquer valor inteiro ou flutuante:
>>> None < float('-inf') < -sys.maxint * 2l < -sys.maxint
True
E no Python 2.7 uma tupla vazia()
é um valor infinito:
>>> () > float('inf') > sys.maxint
True
Esse atalho é útil quando se pode classificar uma lista mista de ints e floats e desejar ter um mínimo e um máximo absolutos para referência.
Este atalho foi removido no Python 3000, no entanto (este é o Python 3.2):
>>> None < 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < int()
Além disso, o Python3000foi removido sys.maxint
na teoria de que todos os ints promovem a longs e o limite não se aplica mais.
PEP 326, Um caso para valores superiores e inferiores, avançou uma referência min e max em Python. O novo comportamento de ordenaçãodocumentado.
Como o PEP 326 foi rejeitado, quais são as definições úteis e úteis para um valor mínimo e máximo que trabalham com números inteiros e flutuantes e longos no Python 2X e no Python 3000?
Editar
Várias respostas estão na linha de "apenas use maxv = float ('inf')" ... A razão pela qual estou pensando, por mais remota que seja a possibilidade, é esta:
>>> float(2**5000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: long int too large to convert to float
E:
>>> cmp(1.0**4999,10.0**5000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')
Ainda:
>>> () > 2**5000
True
Para cmp para um valor float,float('inf')
, o valor longo precisaria ser convertido em float e a conversão causaria umOverflowError
...
Conclusão
Obrigado a todos por suas respostas e comentários. Eu escolhi TryPyPy'sresponda porque parecia mais alinhado com o que eu estava perguntando: um absoluto maior e absoluto menos valor, como descrito na Wikipediaentrada no infinito.
Com essa pergunta, aprendi que um valor longo ou int não é convertido em float para concluir a comparação defloat('inf') > 2**5000
. Eu não sabia disso.