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.

questionAnswers(3)

yourAnswerToTheQuestion