On Wed, 01 Feb 2006 20:26:24 +0100, "Florent Guillaume" <[EMAIL PROTECTED]> said: > Michael Dudzik wrote: > > Sure, but what about when you don't know the boolean value ahead of > > time, like: > > > > C and f(x) or g(x) > > > > On the other hand, (g(x), f(x))[C] works every time > > > > To be fair, both g(x) and f(x) are evaluated while > > > > f(x) if C else g(x) # python 2.5, only evaluates the appropriate > > function. > > > > Still, I mostly spoke up because if one starts to use an idiom like: > > > > python:C and 'somestring' or 'anotherstring' > > > > you have to realize that > > > > python:C and '' or 'anotherstring' > > > > will fail. An idiom that breaks so easily doesn't seem so useful. > > In 90% of cases you'll have a fixed value for the true case or the false > case, and you'll know that one cannot evaluate to false, in which case > you > can choose to use: > C and foo or bar > or > not C and bar or foo > depending on whether foo or bar is potentially false. > > In the remaining cases, you can use > (C and [foo] or [bar])[0] > if it's important to have short-circuit semantics.
But why not just use (bar,foo)[C] in all cases, regardless of the value of bar or foo? Or (bar,foo)[bool(C)] in case C might not be a boolean already. _______________________________________________ Zope3-users mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope3-users
