comprehensions was Re: Switch statements again

Beni Cherniavsky cben at
Mon Jan 20 18:14:18 CET 2003

On 2003-01-19, John Roth wrote:

> "Beni Cherniavsky" <cben at> wrote in message
> news:Pine.GSO.4.44_heb2.09.0301191441590.20859-100000 at techunix.technion.
> > On 2003-01-17, Tim Peters wrote:
> >
> >
> > > but then I never expected anyone to do
> > >
> > > (f() and [g()] or [h()])[0]
> > >
> > > in real life either <0.5 wink>.
> > >
> > That should be written ``f() and g() else h()`` <wink>.
> Actually not. Tim, as usual, has it right. The way
> you wrote it fails if g() evaluates to a false value.
> That's been the standard problem with this construct.
The way I wrote it is a syntax error (notice the ``else``).  What I meant
is to suggest the and..else syntax for the properly working ternary
operator, if it's ever added.  Tim's ``<wink>``-s, as usual, are more
clearly visible than mine :-)

> The way Tim has it, [g()] cannot evaluate to a false value. It's always
> a 1 element list which by definition is true.
To make it even uglier, I once wrote (on the command line, I don't hold
such horrors in real code :-) this with singleton tuples to make it

    (f() and (g(),) or (h(),))[0]

Now it's completely unreadable :-).  I frequenlty find myself using lists
instead of tuples only because they are more readable...

    Beni Cherniavsky <cben at>

There is an Excel spreadsheet here.  Do you want to open it? y
There was a grid bug in the spreadsheet.  The grid bug bites.

More information about the Python-list mailing list