I recently came across this syntax, I am unaware of the difference.
I would appreciate it if someone could tell me the difference.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
The answer is explained here.
To quote:
A class is free to implement
comparison any way it chooses, and it
can choose to make comparison against
None mean something (which actually
makes sense; if someone told you to
implement the None object from
scratch, how else would you get it to
compare True against itself?).
Practically-speaking, there is not much difference since custom comparison operators are rare. But you should use is None as a general rule.
Method 2
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Method 3
In this case, they are the same. None is a singleton object (there only ever exists one None).
is checks to see if the object is the same object, while == just checks if they are equivalent.
For example:
p = [1] q = [1] p is q # False because they are not the same actual object p == q # True because they are equivalent
But since there is only one None, they will always be the same, and is will return True.
p = None q = None p is q # True because they are both pointing to the same "None"
Method 4
It depends on what you are comparing to None. Some classes have custom comparison methods that treat == None differently from is None.
In particular the output of a == None does not even have to be boolean !! – a frequent cause of bugs.
For a specific example take a numpy array where the == comparison is implemented elementwise:
import numpy as np a = np.zeros(3) # now a is array([0., 0., 0.]) a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!! a is None #compares object to object, outputs False
Method 5
If you use numpy,
if np.zeros(3)==None: pass
will give you error when numpy does elementwise comparison
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0