Python: możliwe wartości maksymalne i minimalne
Python 2.x umożliwia porównywanie heterogenicznych typów.
Przydatny skrót (w Pythonie 2.7 tutaj) jest takiNone
porównuje wartość mniejszą niż dowolna wartość całkowita lub zmiennoprzecinkowa:
<code>>>> None < float('-inf') < -sys.maxint * 2l < -sys.maxint True </code>
A w Pythonie 2.7 pusta krotka()
ma nieskończoną wartość:
<code>>>> () > float('inf') > sys.maxint True </code>
Ten skrót jest przydatny, gdy można posortować mieszaną listę int i floatów i chcieć mieć absolutne minimum i maksimum do odniesienia.
Ten skrót został usunięty w Pythonie 3000 (jest to Python 3.2):
<code>>>> None < 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: NoneType() < int() </code>
Ponadto Python3000usunięto sys.maxint
na teorię, że wszystkie ints są promowane na długi, a limit nie ma już zastosowania.
PEP 326, A Case for Top and Bottom Values, rozwinął referencję min i max w Pythonie. Nowe zachowanie przy zamawianiuudokumentowane.
Odkąd PEP 326 został odrzucony, jakie są przydatne, użyteczne definicje dla wartości min i max, które działają z liczbami całkowitymi i pływają i długo na Pythonie 2X i Pythonie 3000?
Edytować
Kilka odpowiedzi jest zgodnych z liniami „po prostu użyj maxv = float („ inf ”)” ... Powodem, dla którego myślę, niezależnie od możliwości, jest:
<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>
I:
<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>
Jeszcze:
<code>>>> () > 2**5000 True </code>
Aby cmp osiągnąć wartość float,float('inf')
, długa wartość musiałaby zostać przekonwertowana na zmiennoprzecinkową, a konwersja spowodowałabyOverflowError
...
Wniosek
Dziękuję wszystkim za odpowiedzi i komentarze. Wybrałem TryPyPy'sodpowiedź ponieważ wydawało się to najbardziej zgodne z tym, o co pytałem: absolutnie największą i absolutnie najmniejszą wartością opisaną w Wikipediiwejście w nieskończoność.
Z tym pytaniem dowiedziałem się, że wartość long lub int nie jest konwertowana na zmienną typu float w celu zakończenia porównaniafloat('inf') > 2**5000
. Nie wiedziałem tego.