Proposal: === and !=== operators
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Fri Jul 11 23:30:48 EDT 2014
Thanks to everyone who has commented. Some responses:
* I was completely mistaken about == enforcing the rule
that __eq__ returns True or False. I have no idea where
I got that idea from, sorry for the noise.
* I disagree that having two equals operators, == and ===,
would be confusing. The Javascript/PHP model doesn't apply:
- In Javascript and PHP, the shorter, more attractive
version == does the wrong thing and is harmful, hence
everyone needs to learn about === immediately.
- In my proposal, the shorter, more attractive version
== does what everyone already assumes == will do. It's
only specialists who need to learn about === .
* But having said that, I find myself trying to solve a problem
reported by Anders which I do not understand, cannot replicate,
and although I'm willing to give him the good faith benefit of
the doubt, I find myself less and less convinced that the
problem is what he thinks it is.
To be specific, the one concrete piece of code Anders has posted is a
completely generic "detect changes" function which he claims is broken by
the presence of NANs. That may be, but his code is not runnable (it uses
undefined methods that could do anything) so cannot be tested, and I
cannot replicate his problem.
NANs or no NANs, a generic "detect changes" function already fails to
work in some circumstances:
py> data = [1, 2.0, 3.0, 4.0]
py> old = data[:]
py> old == data # No changes made yet, should return True
True
py> data[0] = 1.0 # Change of type.
py> old == data # Should return False
True
But perhaps we only care about changes in value, not type. NAN or no NAN,
list equality works fine:
py> data = [1.0, 2.0, float('nan'), 4.0]
py> old = data[:]
py> old == data # No changes made yet, should return True
True
py> data[3] = 104.0
py> old == data # Should return False
False
The only time it may fail, for some definition of "fail", is when the NAN
is replaced by another NAN of the same payload but different identity.
But I still fail to understand Ander's use-case here, how a NAN might be
replaced by another NAN, or why he wants to compare two different NANs as
equal.
Since I do not understand Ander's problem, I cannot hope to solve it. So
I withdraw my suggestion. Thanks to everyone who listened.
--
Steven
More information about the Python-list
mailing list