[Python-Dev] conditional expressions - add parens?

Steve Holden steve at holdenweb.com
Tue Mar 7 16:29:18 CET 2006


Jim Jewett wrote:
> On 3/7/06, Paul Moore <p.f.moore at gmail.com> wrote:
> 
> 
>>The parentheses around genexps were (AFAICT)
>>different - without them, the grammar was ambiguous,
>>so some way of disambiguating was needed.
> 
> 
> The out-of-order evaluation is a very large change,
> because now we have a situation where normal
> parsing completes an expression, but needs to avoid
> evaluating it, just in case.
> 
> Currently, we can write:
> 
>     >>> if False:
>     >>>     print r
>     >>> else:
>     >>>     print 6
> 
>     6
> 
>     >>> r
> 
>     Traceback (most recent call last):
>        File "<pyshell#14>", line 1, in -toplevel-
>           r
>     NameError: name 'r' is not defined
> 
> In the above example, r doesn't get evaluated because
> the if ahead of it says to skip that branch.  But with
> conditional expressions, that flow control is changed
> from *later* in the program.
> 
> I don't think we'll see the equivalent of Intercal Suck
> Points anywhere but intentionally obfuscated code,
> but I do expect to see:
> 
>     >>> side_effect() if condition
> 
> In fact, I think the below examples are reasonable uses
> that do a better job of expressing intent than the if
> statement would.  I just don't like the mental backtrack
> they require, and would like some sort of advance
> warning.  Parentheses at least tell me "You're not done
> yet; keep reading."
> 
>     >>> ack(r,r) if r not in cache
> 
>     >>> log(message) if error_flag
> 
I think you've misunderstood the nature of the change. HTe new 
conditionals are *expressions*, they aren't postfix conditionals for 
statements.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd                 www.holdenweb.com
Love me, love my blog         holdenweb.blogspot.com



More information about the Python-Dev mailing list