Is nan in (nan,) correct?
Ethan Furman
ethan at stoneleaf.us
Thu Mar 5 22:44:56 EST 2015
On 03/05/2015 07:26 PM, Ben Finney wrote:
> Ethan Furman <ethan at stoneleaf.us> writes:
>
>> On 03/05/2015 06:55 PM, Ben Finney wrote:
>>
>>> class NullType(object):
>>> """ A type whose value never equals any other.
>>>
>>> This type's values will behave correctly when tested for
>>> membership in a collection::
>>>
>>> >>> foo = NullType()
>>> >>> bar = NullType()
>>> >>> foo is foo
>>> True
>>> >>> foo is bar
>>> False
>>> >>> foo == foo
>>> False
>>> >>> foo == bar
>>> False
>>> >>> quux = [foo, "spam"]
>>> >>> "spam" in quux
>>> True
>>> >>> foo in quux
>>> True
>>
>> Did you mean False here? Because True is current behavior.
>
> Isn't the point at issue that the Python interpreter *may* optimise by
> assuming ‘is implies equality’, so the ‘in’ operator can fail if that
> assumption is false?
No, it's not a /may/, it's a /does/, and that it can be optimized is a bonus.
> I thought the problem was that types with custom behaviour, as with the
> ‘NullType’ example, needed to deal specially with the ‘is implies
> equality’ optimisation Steven explained.
The NaN-type objects cannot deal with it directly, as that behavior is in the container.
> If that's the correct behaviour, and we can *depend* on it being
> correct, then I don't see what the problem is.
Well, we can depend on it for native Python types -- but if you write your own container, along with your own
__contains__, then you might unwittingly do `for item in self.container: if item == target: return True` and then NaN
(or NullType, or what-have-you) would not work "correctly" [1] for your container.
--
~Ethan~
[1] Otherwise known as: how Python does it.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/python-list/attachments/20150305/705357ee/attachment.sig>
More information about the Python-list
mailing list