On Sat, Oct 02, 2021 at 01:21:46PM -0000, Debashish Palit wrote:
> Steven D'Aprano wrote:
> > On Sat, Oct 02, 2021 at 02:53:03AM -0000, Debashish Palit wrote:
> > > There is no need of a three_way_flag - just use a conditional 
> > > expression instead of an if-elif-else block,

> Using a conditional expression, we can code it like this:
> num = float(s) if (c := s.isfloat()) else int(s) if c is False else 0   # any 
> default

Here is your three_way_flag:

    c := s.isfloat()

Just because you called it the obfuscated name "c" (for character?) 
instead of a meaningful name, doesn't change the fact that it is a flag 
that can take three values, or that you have to use *two* conditional 
tests giving *three* branches to deal with it.

We could write it as a lookup table with a dispatch function too:

    num = {True: float, False: int, None: lambda x: 0}[s.isfloat()](s)

There are still three possible values for your flag, and three possible 
actions to take.


> Better still if we know its going to be a number, we can do -

But you don't know it is going to be a number.


> We can simply do -
> if s.isfloat() is not None:    # valid int or float
>     ...

And then what? Is it a float or an int?

    if s.isfloat() is not None:
        if s.isfloat():
            return float(s)
        else:
            return int(s)
    else:
        return 0

It's still a three way flag even if you calculate the flag twice. That 
just makes it even more wasteful and inefficient.


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

Reply via email to