[Python-ideas] Suggestion: Extend integers to include iNaN

Serhiy Storchaka storchaka at gmail.com
Sat Sep 29 08:56:40 EDT 2018


29.09.18 15:19, Steven D'Aprano пише:
> On Sat, Sep 29, 2018 at 10:50:24AM +0300, Serhiy Storchaka wrote:
>>>> How does it differ from float('nan')?
>>>>
>>> It is still an integer and would pass through any processing that
>>> expected an integer as one, (with a value of iNaN).
>>
>> Python is dynamically typed language. What is such processing that would
>> work with iNaN, but doesn't work with float('nan')?
> 
> The most obvious difference is that any code which checks for
> isinstance(x, int) will fail with a float NAN.

Yes, an explicit check. But why do you need an explicit check? What will 
you do with True returned for iNaN? Can you convert it to a machine 
integer or use it as length or index?

> If you use MyPy for
> static type checking, passing a float NAN to something annotated to only
> accept ints will be flagged as an error.

I think that passing iNaN to most of functions which expect int is an 
error. Does MyPy supports something like "int | iNaN"? Than it should be 
used for functions which accept int and iNaN.

> Bitwise operators don't work:
> 
> py> NAN = float("nan")
> py> NAN & 1
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> TypeError: unsupported operand type(s) for &: 'float' and 'int'
> 
> 
> Now I'm not sure what Steve expects NANs to do with bitwise operators.
> But raising TypeError is probably not what we want.

Since these operations make no sense, it makes no sense to discuss them.

> A few more operations which aren't supported by floats:
> 
> NAN.numerator
> NAN.denominator

Do you often use these attributes of ints?

> NAN.from_bytes > NAN.bit_length
> NAN.to_bytes

What is the meaning of this?



More information about the Python-ideas mailing list