Python: Verwendbare Max- und Min-Werte

Mit Python 2.x können heterogene Typen verglichen werden.

Eine nützliche Verknüpfung (in Python 2.7 hier) ist dasNone vergleicht kleiner als eine Ganzzahl oder ein Gleitkommawert:

<code>>>> None < float('-inf') < -sys.maxint * 2l < -sys.maxint
True
</code>

Und in Python 2.7 ein leeres Tupel() ist ein unendlicher Wert:

<code>>>> () > float('inf') > sys.maxint
True
</code>

Diese Verknüpfung ist nützlich, wenn Sie eine gemischte Liste von Ints und Floats sortieren und ein absolutes Minimum und Maximum als Referenz haben möchten.

Diese Verknüpfung wurde jedoch in Python 3000 entfernt (dies ist Python 3.2):

<code>>>> None < 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < int()
</code>

Darüber hinaus Python3000hat entfernt sys.maxint Auf die Theorie, dass alle Ints zu Longs aufsteigen und das Limit nicht mehr gilt.

PEP 326, Ein Fall für obere und untere Werte, hat in Python eine Referenz für min und max erstellt. Das neue Bestellverhaltendokumentiert.

Was sind nützliche, verwendbare Definitionen für einen Min- und Max-Wert, die mit Ganzzahlen und Gleitkommazahlen unter Python 2X und Python 3000 funktionieren, seit PEP 326 abgelehnt wurde?

Bearbeiten

Mehrere Antworten lauten wie folgt: "benutze einfach maxv = float ('inf')" ... Der Grund, warum ich denke, egal wie weit entfernt die Möglichkeit ist, ist folgender:

<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>

Und:

<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>

Noch:

<code>>>> () > 2**5000
True
</code>

Um einen Float-Wert zu erhalten,float('inf')müsste der Long-Wert in einen Float konvertiert werden und die Konvertierung würde einenOverflowError...

Fazit

Vielen Dank für Ihre Antworten und Kommentare. Ich habe TryPyPy's ausgewähltAntworten denn es schien am ehesten mit dem übereinzustimmen, was ich verlangte: ein absolut größter und absolut kleinster Wert, wie in der Wikipedia beschriebenEintritt in die Unendlichkeit.

Mit dieser Frage erfuhr ich, dass ein Long- oder Int-Wert nicht in einen Float konvertiert wird, um den Vergleich von abzuschließenfloat('inf') > 2**5000. Das wusste ich nicht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage