Vergleicht Keiner mit built-in-Typen mithilfe von arithmetischen Operatoren?
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> None > 0
False
>>> None == 0
False
>>> None < 0
True
- Ist der Vergleich
None
Sie mithilfe von arithmetischen Operatoren gut definiert für built-in Typen (Ganzzahlen in diesem Fall)? - Ist der Unterschied zwischen den beiden ersten und den Dritten Vergleich Teil language specification (Python-Spezifikation - Sie müssen Spaß machen :)) oder ist es CPython Implementierung detail?
==
und!=
sind in der Regel sicher, aber Sie sollenis None
undis not None
für singletons wieNone
als pro PEP-8- Der springende Punkt der Frage ist, was tut sicher hier bedeuten. Ich bin mir wohl bewusst, sollte man
is
zu vergleichen mitNone
aber Frage ist, spezifische und nicht Fragen, welcher operator verwendet werden soll. - bugs.python.org/issue1673405
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die einzig sinnvolle Vergleich können Sie wirklich mit
None
istif obj is None:
(oderif obj is not None:
).Vergleich zwischen verschiedenen Arten hat gewesen entfernt von Python 3 aus guten Gründen - Sie waren eine häufige Quelle von Fehlern und führen zu Verwirrung. Zum Beispiel
In Python 3, erhalten Sie ein
TypeError
beim Vergleich der Werte von verschiedenen Typen wiestr
vs.int
oder irgendetwas vs.None
.(Ich meine "Vergleich" in dem Sinne zu versuchen, um zu bestimmen, welcher der beiden Werte größer/kleiner. Vergleich auf Gleichheit ist OK - es wird ja immer wieder
False
wenn zwei Objekt sind von verschiedenen Arten.)Habe ich nicht gefunden eine Referenz in der Dokumentation für diese, aber in Lernen Python, 4th edition, Mark Lutz schreibt auf Seite 204:
None < 0
wahr ist?None
ist immer niedriger als jedeint
ist immer niedriger als jedestr
etc.Einige interessante Zitate von http://bytes.com/topic/python/answers/801701-why-none-0-a
und
>>> sorted([2, 1.5, 2.5]) [1.5, 2, 2.5] >>> sorted([2, 1.5, 2.5, 'bla', '2', '2.5', None]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: str() < int()
.sorted([2, 1.5, 2.5, 'bla', '2', '2.5', None])
?