Python: используемые максимальные и минимальные значения
Python 2.x позволяет сравнивать разнородные типы.
Полезный ярлык (в Python 2.7 здесь) заключается в том, чтоNone
сравнивает меньшее, чем любое целое число или значение с плавающей точкой:
<code>>>> None < float('-inf') < -sys.maxint * 2l < -sys.maxint True </code>
А в Python 2.7 пустой кортеж()
это бесконечное значение:
<code>>>> () > float('inf') > sys.maxint True </code>
Этот ярлык полезен, когда можно отсортировать смешанный список целых чисел и чисел с плавающей точкой и хотеть иметь абсолютный минимум и максимум для ссылки.
Этот ярлык был удален в Python 3000, однако (это Python 3.2):
<code>>>> None < 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: NoneType() < int() </code>
Кроме того, Python3000удалил sys.maxint
на теории, что все целые числа продвигаются к длинным, и предел больше не применяется.
ОПТОСОЗ 326Случай для верхних и нижних значений, расширенный ссылочный мин и макс в Python. Новое поведение при заказедокументированный.
Так как PEP 326 был отклонен, какие полезные, пригодные для использования определения для минимального и максимального значений, которые работают с целыми числами и числами с плавающей запятой и длинными в Python 2X и Python 3000?
Edit
Несколько ответов совпадают с «просто используйте maxv = float (» inf ») ... Причина, по которой я думаю, какой бы отдаленной ни была возможность, заключается в следующем:
<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>
А также:
<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>
Еще:
<code>>>> () > 2**5000 True </code>
Для того, чтобы cmp к значению с плавающей точкой,float('inf')
длинное значение должно быть преобразовано в число с плавающей точкой, и преобразование вызоветOverflowError
...
Conclusion
Спасибо всем за ваши ответы и комментарии. Я выбрал TryPyPyответ потому что это казалось наиболее совпадающим с тем, что я спрашивал: абсолютное наибольшее и абсолютное наименьшее значение, как описано в Википедиивход на бесконечность.
С помощью этого вопроса я узнал, что значение long или int не преобразуется в число с плавающей точкой, чтобы завершить сравнениеfloat('inf') > 2**5000
, Я не знал этого.