@Bnicholas Jednak nie jest tak jak nullw PHP, w tym ustawieniu zmienna na nullw PHP daje podobne zachowanie w większości przypadków, jakbyś nie zdefiniował jej w pierwszej kolejności. Wartość Nonew Pythonie jest zupełnie inna niż niezdefiniowana zmienna. Nonejest jednak podobny do większości innych inkarnacji null(dopóki nie przejdziemy do bardziej tajemniczych szczegółów, przynajmniej).
To nie jest słowo kluczowe; jest to domyślnie ustawiona nazwa wbudowanego obiektu. Możesz zrobić wszystko None, co możesz zrobić z dowolnym innym „zwykłym” obiektem nieokreślonego typu: przechowywać go w kontenerach, wydrukować jego ciąg reprezentujący, sprawdzić na nim niektóre metadane ... W każdym razie, czy wypróbowałeś Google dla „python null równowartość"? Jestem poważny; to zajmie trochę analizy, ale informacje są tam.
Otwórz terminal python, wpisz print xi naciśnij enter. Spowoduje to błąd interpretera, podobnie jak większość języków podczas próby drukowania niezdefiniowanej zmiennej. Ale jeśli zdefiniujesz zmienną, a następnie spróbujesz ją wyczyścić za pomocą None, użycie print xkodu wygeneruje słowo Nonejako wynik. Jestem nowym użytkownikiem Pythona, więc mogę się pomylić, ale nie wygląda to na zachowanie wyczyszczonej zmiennej.
Chciałem tylko zaznaczyć, że jeśli przypadkowo zadeklarowałeś zmienną, która zastępuje wbudowane polecenia, np. type=… Kiedy chciałeś pisać, type(…)usunięcie to jest najłatwiejszym sposobem na odzyskanie pierwotnej funkcjonalności. Oznacza to, że jeśli pozostaniesz przy nim jako Brak, nadal będziesz odcinał dostęp do podstawowej funkcji.
Tego szukałem. Grając na linii cmd, miałem ... set = set(myList)i wtedy zdałem sobie sprawę, że nie mogę już używać zestawu jako funkcji (doh). Używanie del setpozwoliło mi użyć go ponownie jako FX. Oczywiście nigdy nie użyłbym tego zarezerwowanego var w rzeczywistym skrypcie.
Co jeśli chcę całkowicie usunąć zmienną, która w niektórych okolicznościach nie istnieje. Czy jest jakiś parametr pozwalający uniknąć błędu? Muszę usunąć kilka zmiennych: del a, b, c, d Mógłbym użyć pętli i spróbować / oprócz, ale wolę jakiś przełącznik, aby tego uniknąć.
W rzeczywistości nie usuwa to zmiennej / właściwości. Wystarczy, aby ustawić jego wartość na None, dlatego zmienna nadal będzie zajmować miejsce w pamięci. Jeśli chcesz całkowicie usunąć wszystkie istnienie zmiennej z pamięci, możesz po prostu wpisać:
OP powiedział, że clearnie remove. del zabije atrybut i odnośniki. Jest o wiele czystsze ustawienie na Brak, niż można to sprawdzić if self.lefti byłoby to wystarczające, aby sprawdzić, czy węzeł jest pusty.
„Jest o wiele czystsze ustawienie na Brak” - warto wziąć pod uwagę, że jeśli ktoś (ty jakiś czas później lub współpracownik) czyta kod del, IMHO sprawia, że bardziej oczywiste jest, że o zmiennej można zapomnieć podczas analizowania mentalnego ' kod.
@NikolayGromov w codziennym kodzie, jeśli chcesz uzyskać wartość self.left, wolisz sprawdzić if self.left:, czy wolisz poradzić sobie z możliwym wyjątkiem NameError, który spowoduje awarię programu, jeśli nie obsłużysz go wszędzie ?
W przypadku drugiej opcji „wyczyść jej zawartość” jest niepoprawna, spowoduje to jedynie ponowne przypisanie zmiennej do Brak, oryginalny obiekt pozostanie nadal (chyba że liczba odwołań spadnie do zera, w którym to przypadku jest on usuwany).
ok, myślę, że mam najlepszy alternatywny pomysł na odpowiedź @bnul:
Możesz usunąć poszczególne nazwiska za pomocą del:
del x
lub możesz usunąć je z obiektu globals ():
for name in dir():
if not name.startswith('_'):
del globals()[name]
To tylko przykładowa pętla; defensywnie usuwa tylko nazwy, które nie zaczynają się znakiem podkreślenia, przyjmując (nieuzasadnione) założenie, że na początku używałeś tylko interpretera nazw bez znaku podkreślenia. Zamiast tego możesz użyć zakodowanej listy nazwisk (białej listy), jeśli naprawdę chcesz być dokładny. Nie ma wbudowanej funkcji do wykonania czyszczenia, poza wyjściem i ponownym uruchomieniem interpretera.
Zaimportowane moduły (import os) pozostaną importowane, ponieważ odwołuje się do nich sys.modules; kolejne importy ponownie wykorzystają już zaimportowany obiekt modułu. Po prostu nie będziesz mieć odniesienia do nich w bieżącej globalnej przestrzeni nazw.
Ważne jest, aby znać różnice i umieścić kilka procedur obsługi wyjątków, gdy używasz ustaw wartość na Brak. Jeśli drukujesz wartość instrukcji warunkowych przy użyciu szablonu, powiedzmy:
print("The value of the variable is {}".format(self.left))
może zostać wyświetlona wartość zmiennej „Wartość zmiennej to Brak”. Dlatego musiałbyś umieścić tam kilka programów obsługi wyjątków:
if self.left:#Then only print stuff
Powyższe polecenie wyświetli wartości tylko wtedy, gdy self.left nie jest None
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.