python syntax for conditional is unfortunate

Aaron "Castironpi" Brady castironpi at gmail.com
Tue Sep 23 22:24:00 EDT 2008


On Sep 23, 8:50 pm, Neal Becker <ndbeck... at gmail.com> wrote:
> Aaron "Castironpi" Brady wrote:
> > On Sep 23, 6:52 pm, Neal Becker <ndbeck... at gmail.com> wrote:
> >> In hindsight, I am disappointed with the choice of conditional syntax.  I
> >> know it's too late to change.  The problem is
>
> >> y = some thing or other if x else something_else
>
> >> When scanning this my eye tends to see the first phrase and only later
> >> notice that it's conditioned on x (or maybe not notice at all!).
> >> Particularly if 'some thing or other' is long or complicated.
>
> > You're talking strictly about readability, which among other things is
> > in the eye of the beholder, of course.  Temporary variables can clean
> > up some code, even if choosing names can be a hassle and it's more
> > things to keep track of.  Long lines and extra variables form a trade-
> > off.  You are writing a line with a conditional expression the value
> > of which depends on something.  What does it depend on, what is its
> > value if that's true, and what is it if it's false?  '...if...else...'
> > only takes 6 characters... maybe you want more!
>
> > If you're looking for a strictly syntactic construct, you can always
> > "fire blanks", or tracers, if the analogy's more accurate.
>
> > z= conditionally( x ) if b else y
>
> > This could serve as a gentle reminder, even where 'conditionally'
> > returns its argument, i.e. is the identity function.  You can always
> > roll your own ternary with extra parameters too:
>
> > z= condition( b, x, y )
>
> > Just don't confuse it with threading.Condition.
>
> > Otherwise, you're stuck with old syntax markers, and unless you
> > wanted:
>
> > z= if b then x else y
>
> > You're out of options.  You have to express it somehow.  Did you want
> > the condition first?  Was there an alternative proposal you
> > preferred?  IINM if I'm not mistaken,
>
> > z= b and x or y
>
> > works just the same so long as x evaluates to True, as it will be
> > tested.
>
> > Feel free to write your own from scratch, and we'll see how close
> > Python can come to resembling it.
>
> > I suppose you can compare it to someone who stops listening before the
> > word 'if', and completely misunderstands your statement.  "Feed the
> > dog if he's standing near the food dish" != "Feed the dog", which can
> > of course lead to errors of both omission and commission (doing too
> > little -or- too much).  There's no way to fix that in a guaranteed
> > way, except to say, "listen to the whole statement".
>
> > And strictly sarcastically, what did you want to do with reading the
> > program?  Why were you reading it?  <snicker, ducks>
>
> I find I'm often tripped up by:
>
> x = Y (lots of  constructor arguments....) if something ...
>
> on first glance, I don't notice the if.
>
> Why am I reading this?  Umm, because I wrote it.

Put it somewhere you'll notice!



More information about the Python-list mailing list