On Sat, Oct 02, 2021 at 02:17:32AM -0000, Debashish Palit wrote:

> The method need not take care of every variation. Currently there is 
> no method to check for a float in a string even without formatting.

Right, because no method is needed. If you want to convert something to 
a float (whether a string, or anything else), it is nearly always 
better to try to convert it:

    try:
        result = float(s)
    except TypeError:
        # Cannot be converted to a float.
        ... # some fallback routine

This software pattern is called "Easier to Ask Forgiveness than 
Permission" and is usually more efficient and safer than the opposite 
pattern, "Look Before You Leap".

https://devblogs.microsoft.com/python/idiomatic-python-eafp-versus-lbyl/

So the number of use-cases for your function are probably very few.

 
> 1. When accepting user input with the input() function, you may get 
> integers and not floats. If you just convert the strings to floats, 
> you will get the result of a calculation as a float. Here the type of 
> the input needs to be preserved.

Can you give a real example of a case where you are doing calculations 
on a number provided as a string, but need to preserve the original 
format?


> 2. A case that may come up often is passing numbers as strings to an 
> instance method.

Why pass your numbers to functions as *strings* if you want to do 
calculations with them?

> After converting the number to a float, you may want 
> to output the value in a repr method. Saving the precise type would 
> help.

If you need to preserve the exact input for the repr method, you should 
preserve the actual input.

    class MyClass:
        def __init__(self, astring):
            self._arg = astring
            self.number = float(astring)
        def __repr__(self):
            return 'MyClass(%s)' % self._arg


> The parse_value function would work as well but str.isfloat is more 
> inline with the current string methods.

Not really. There are no string methods to test for:

- ints
- floats
- complex numbers
- fractions
- decimals

you are expected to just try to convert and catch the exception if it 
occurs (EAFP). So this would be new.

The existing string methods isdecimal, isdigit and isnumeric test for 
Unicode categories, for example:


    '\N{CIRCLED DIGIT THREE}'.isdigit()
    --> returns True

    '\N{CIRCLED DIGIT THREE}'.isdecimal()
    --> returns False


    '\N{ETHIOPIC NUMBER FIFTY}'.isnumeric()
    --> returns True

    '\N{ETHIOPIC NUMBER FIFTY}'.isdigit()
    --> returns False



-- 
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/SXXV5YPEB6QBPNZ5PQ3E4O7GI4XRMFE4/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to