Czy jest jakaś różnica między tymi trzema w konkretnym scenariuszu?
Pierwszy pyta, czy zmienna jest cokolwiek niesprawna. Ten test nie powiedzie się dla wszystkich rodzajów rzeczy oprócz None
- False
, 0
każdy pusty sekwencji itp
Drugi pyta czy to magia stała None
Singleton. To się nie uda tylko dla samej None
.
Trzeci pyta, czy jest to coś, co uważa się za równe None
. Nie powiedzie się, na przykład, Holder(None)
, gdzie Holder
jest klasą opakowania, której porównania instancji są równe temu, co trzymają. Lub, aby dać mniej realistyczny, ale krótszy do kodu exmaple:
class Stupid(object):
def __ne__(self, other):
return False
Variable = Stupid()
Ten ostatni rzadko jest przydatny; w rzeczywistości, jeśli kiedykolwiek pomyślisz, że powinieneś sprawdzić == None
lub != None
, a nie tworzysz przezroczystych klas ani niczego w tym stylu, prawdopodobnie chciałeś is None
lub is not None
. Ale pozostałe dwa są bardzo użyteczne i powszechne.
jeśli nie ma różnicy, który z nich jest bardziej odpowiedni do użycia?
Cóż, jest różnica, i który z nich jest bardziej odpowiedni, zależy od konkretnego zastosowania.
Pod koniec pytania wydaje się, że możesz zapytać, czy jest jakaś różnica w konkretnym przypadku, gdzie Variable
jest zdecydowanie None
. W tym przypadku oczywiście nie ma żadnej różnicy funkcjonalnej między tymi trzema. * Wszystkie z nich są gwarantowane jako fałszywe, a zatem nic nie robią. Co oznacza, że nie ma również żadnej różnicy między żadną z tych trzech a pisaniem żadnego kodu. Co jest dużo prostsze, bardziej czytelne i szybsze.
* Występuje różnica w wydajności - pierwsza z nich nie musi być LOAD_CONST
z None
ani wywoływać operatora porównania. I nawet, jeśli udało Ci się jakoś ponownie ustalić None
lub zmienić wartość stałej None
(być może poprzez deptanie całej sterty za pomocą ctypes
?), Pierwsza z nich prawdopodobnie jeszcze zadziała. Ale żaden z nich nigdy nie będzie miał znaczenia - a jeśli tak, to znowu żaden kod nie będzie jeszcze szybszy i bardziej niezawodny.
Może on pomieszane 'jeśli x jest None' i' jeśli x == None' – jamylak
tak, dobrze. Dzięki za przypomnienie –
To powinno być zamknięte, to nie jest prawdziwe pytanie ani duplikat. http: // stackoverflow.com/questions/3257919/is-none-vs-none http://stackoverflow.com/questions/7816363/if-a-vs-if-a-is-not-none – jamylak