I mentioned that in my post; however it doesn't satisfy the problems I have (mainly being that eval(repr(x))==x)

I still think unifying it as a constant is better because then the repr of a float gives a string which, if evaluated, gives the float back exactly. Using math.inf or string conversion throws an error if you try to evaluate it

On Fri, Sep 4, 2020, 6:05 PM Christopher Barker <pythonchb@gmail.com> wrote:
This is in the math module already, along with NaN:

In : import math

In : math.inf
Out: inf

In : math.nan
Out: nan

The same value

In : math.inf == float('inf')
Out: True

but not the same object -- i.e. it's not a singleton.

In : math.inf is float('inf')
Out: False

-CHB

On Fri, Sep 4, 2020 at 9:49 AM Cade Brown <brown.cade@gmail.com> wrote:
I am positing that Python should contain a constant (similar to True, False, None), called Infinity.

It would be equivalent to `float('inf')`, i.e. a floating point value representing a non-fininte value. It would be the positive constant; negative infinity could retrieved via `-Infinity`

Or, to keep float representation the same, the name `inf` could be used, but that does not fit Python's normal choice for such identifiers (but indeed, this is what C uses which is the desired behavior of string conversion)

I think there are a number of good reasons for this constant. For example:
* It is also a fundamental constant (similar to True, False, and None), and should be representable as such in the language
* Requiring a cast from float to string is messy, and also obviously less efficient (but this performance difference is likely insignificant)
* Further, having a function call for something that should be a constant is a code-smell; in general str -> float conversion may throw an error or anything else and I'd rather not worry about that.
* It would make the useful property that `eval(repr(x)) == x` for floating point numbers (currently, `NameError: name 'inf' is not defined`)

This makes it difficult to, for example, naively serialize a list of floats. For example:

```
>>> x = [1, 2, 3, 4]
>>> repr(x)
'[1, 2, 3, 4]'
>>> eval(repr(x)) == x
True
>>> x = [1, 2, 3, float('inf')]
>>> repr(x)
'[1, 2, 3, inf]'
>>> eval(repr(x)) == x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'inf' is not defined
```

To me, this is problematic; I would expect it to work seamlessly as it does with other floating point constants.

A few rebuttals/claims against:
- Creating a new constant (Infinity) which is unassignable may break existing code
- Converting a float to string is not the same as it is in C. Whil

I also realize that there is `math.inf`, but I argue that the constant is more fundamental than that, and it still doesn't solve the problem with `repr()` I described

Thanks,
----
Research Assistant @ ICL (Innovative Computing Laboratory)

_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/XMA6KOBLPABV7EL5GV2BIRC2ESYKXMVV/
Code of Conduct: http://python.org/psf/codeofconduct/

--
Christopher Barker, PhD

Python Language Consulting
- Teaching
- Scientific Software Development
- Desktop GUI and Web Development
- wxPython, numpy, scipy, Cython