Hence why I said 'would', 'if' etc. And it was brought up/suggested, having singletons. It does naturally flow from having a built-in (much like having singletons for booleans does):
sugggesting that one reason that they were made keywords is that it's
useful for them to be singletons, which is much harder to do (or at least use consistently) if the names can be reassigned. But these float special values can't be singletons anyway -- they could come from anywhere, so you really don't want to have people doing:
(to be honest, to me it does make sense to have 'inf' singletons, but not for 'nan's. but, neither is part of the PEP).
'inf' is a very special value, and there are only 2 infinite floats (inf, -inf). Having a singleton is useful also perhaps as a memory optimization (i.e. whenever creating a float from C, check if it is infinite, and if so, return a new reference to the global inf/-inf variable).
Again, this is not part of the PEP, so I don't think we want to spend much time discussing whether they should be singletons. For now, the answer seems to be: no Thanks, ---- *Cade Brown* Research Assistant @ ICL (Innovative Computing Laboratory) Personal Email: firstname.lastname@example.org ICL/College Email: email@example.com
On Sun, Sep 13, 2020 at 10:19 PM Chris Angelico firstname.lastname@example.org wrote:
On Mon, Sep 14, 2020 at 11:05 AM Cade Brown email@example.com wrote:
This would become relevant, if, say Python 4.0 migrated 'inf' and 'nan'
to builtin names (like True and False). If that happened, a 'nan' singleton wouldn't make sense unless you had 2**53 of them, so code like:
x is nan
Would be a flawed formulation
Nobody's suggesting that they become keywords representing singletons, which is what True and False are. (At least, I don't think so.) What's being proposed is simply a builtin name that has a value of float("inf"). People don't write "x is 1.5" and they shouldn't use "x is inf". It doesn't matter that there are multiple bit patterns that represent nan; you shouldn't be doing this even when there's only one bit pattern for the value. Yes, sometimes people do this with small integers, and in CPython it may work ("x is 5" will usually be true for any integer 5), but it's just as buggy there and I don't think that's particularly relevant.
(How often do people even use "x is True"?)
ChrisA _______________________________________________ Python-ideas mailing list -- firstname.lastname@example.org To unsubscribe send an email to email@example.com https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://firstname.lastname@example.org/message/PAQQ4J... Code of Conduct: http://python.org/psf/codeofconduct/