Odpowiedź Martijna wyjaśnia, co None
jest w Pythonie i poprawnie stwierdza, że książka wprowadza w błąd. Ponieważ programiści Pythona z reguły nigdy by tego nie powiedzieli
Przypisanie wartości None
zmiennej jest jednym ze sposobów przywrócenia jej do pierwotnego, pustego stanu.
Trudno jest wyjaśnić, co ma na myśli Briggs w sposób, który ma sens i wyjaśnia, dlaczego nikt tutaj nie wydaje się być z tego zadowolony. Jedna analogia, która może pomóc:
W Pythonie nazwy zmiennych są jak naklejki nakładane na obiekty. Każda naklejka ma wypisaną unikalną nazwę i może znajdować się tylko na jednym przedmiocie naraz, ale możesz umieścić więcej niż jedną naklejkę na tym samym przedmiocie, jeśli chcesz. Kiedy piszesz
F = "fork"
umieszczasz naklejkę "F" na obiekcie typu string "fork"
. Jeśli napiszesz
F = None
przesuwasz naklejkę na None
obiekt.
Co Briggs prosi cię do wyobrażenia jest, aby nie pisać naklejkę "F"
, nie było jużF
naklejki na None
, a wszystko co robił było przenieść go od None
do"fork"
. Więc kiedy piszesz F = None
, „resetujesz [ting] do pierwotnego, pustego stanu”, jeśli zdecydowaliśmy się traktować to None
jako znaczenie empty state
.
Widzę, do czego zmierza, ale to zły sposób patrzenia na to. Jeśli uruchomisz Pythona i wpiszeszprint(F)
, zobaczysz
>>> print(F)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'F' is not defined
a to NameError
oznacza, że Python nie rozpoznaje nazwy F
, ponieważ nie ma takiej naklejki . Jeśli Briggs miał rację i F = None
resetuje sięF
do swojego pierwotnego stanu, to powinien tam być teraz i powinniśmy zobaczyć
>>> print(F)
None
tak jak robimy to po wpisaniu F = None
i naklejeniu naklejkiNone
.
Więc to wszystko, co się dzieje. W rzeczywistości Python zawiera kilka naklejek już dołączonych do obiektów (wbudowane nazwy), ale inne musisz napisać samemu liniami takimi jak F = "fork"
i A = 2
i c17 = 3.14
, a następnie możesz przykleić je później na innych obiektach (np.F = 10
Lub F = None
; to wszystko to samo .)
Briggs udaje, że wszystkie możliwe naklejki, które chciałbyś napisać, zostały już przyklejone do None
obiektu.
None
nie jest domyślnym pustym stanem dla zmiennych.