Jak jamylak napisał None
nie jest po prostu wydrukowane przez muszli Pythona.
Jest to wygodne, ponieważ wszystkie funkcje coś powrotu: gdy wartość nie jest określona, wracają None
:
>>> def f():
... print "Hello"
...
>>> f()
Hello
>>> print f() # f() returns None!
Hello
None
To dlatego pociski Python nie wydrukować powrócił Brak wartości. print None
jest inny, ponieważ wyraźnie prosi Pythona o wydrukowanie wartości None
.
Co do porównań, None
jest nie uważane za nieskończoność.
W przypadku Pythona 2 obiekt general rule oznacza, że obiekty, których nie można porównywać w żaden znaczący sposób, nie podnoszą wyjątku w porównaniu, ale zwracają pewien arbitralny wynik. W przypadku CPython arbitralna reguła jest następująca:
Obiekty różnych typów z wyjątkiem liczb są uporządkowane według ich typów: nazw; obiekty tego samego typu, które nie obsługują właściwego porównania, są uporządkowane według ich adresu.
Python 3 podnosi wyjątek, dla non-sensownych porównań jak 1 > None
i porównania wykonanej przez max(1, None)
.
Jeśli potrzebujesz - infinity, Python oferuje float('-inf')
.
Dlaczego więc max (None, 1) return 1? to jest arbitralne? – mclafee
Zauważ, że ta reguła dotyczy tylko Pythona 2. W Pythonie 3 jest ona naprawiona i otrzymujesz znaczący komunikat o błędzie 'unorderable types: int()
jamylak
@mclafee: 'max (None, 1)' jest nieokreślone. Wydaje się, że reguła "order według typu" dla CPython 2, którą zacytowałem, nie ma zastosowania do porównania między liczbą całkowitą a 'None', ponieważ' None' jest typu ''NoneType'', który pojawia się po'' int ' '. Może ta druga zasada ma zastosowanie, chociaż (w teście zrobiłem "id (1)> id (None)' było 'True'). – EOL