On Fri, Sep 04, 2020 at 06:10:23PM -0400, Cade Brown wrote:
> I mentioned that in my post; however it doesn't satisfy the problems I have
> (mainly being that eval(repr(x))==x)

I'm not very sympathetic to that problem. `eval(repr(x))` is a Nice To 
Have convenience for the interactive interpreter, it is not a guarantee, 
and it is not best practice when coding -- especially not if your x 
values are objects that come from a third party.

`float(repr(x))` works fine and avoids both the security and performance 
issues with eval:

    py> from math import inf
    py> nums = [1.2, -8.9e-50, inf]
    py> all([float(repr(x)) == x for x in nums])
    True

So I'm going to climb out on a limb here and say that if you're 
calling eval on the repr of floats, you're probably doing the wrong 
thing. In fact, if you know that they are certainly floats, and never 
any other kind of object, then you are *certainly* doing the wrong thing 
because of performance:

    $ python3 -m timeit "eval('1.2575')"
    100000 loops, best of 5: 3.21 usec per loop
    $ python3 -m timeit "float('1.2575')"
    2000000 loops, best of 5: 113 nsec per loop

And if you *don't* know what sort of objects they are, then you're 
leaving yourself open to a world of hurt if there is any possibility you 
might get them from an untrusted third-party.



-- 
Steve
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@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/6DKETUBLVANL737YW3E7KYI5DT2ST5H3/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to