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:
<code>>>> None < float('-inf') < -sys.maxint * 2l < -sys.maxint True </code>
E no Python 2.7 uma tupla vazia()
é um valor infinito:
<code>>>> () > float('inf') > sys.maxint True </code>
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):
<code>>>> None < 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: NoneType() < int() </code>
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:
<code>>>> float(2**5000) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: long int too large to convert to float </code>
E:
<code>>>> cmp(1.0**4999,10.0**5000) Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: (34, 'Result too large') </code>
Ainda:
<code>>>> () > 2**5000 True </code>
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.