On Thu, Feb 13, 2014 at 9:58 PM, Chris Angelico <rosuav@gmail.com> wrote:
Responding to your post in different order to the original.

On Fri, Feb 14, 2014 at 8:59 AM, Ram Rachum <ram.rachum@gmail.com> wrote:
> If you'd like to bind to a variable only a part of the condition, this would
> work too:
>
>     if x<5 with expensive_computation_0() as x:
>         # Do something with x

Definitely don't like this syntax - while it might be useful to
snapshot part of a condition (I've done it in C plenty of times), this
notation feels clumsy. However...



I agree that a non-clunky way to extract variables from conditions with an operator would be nice. Maybe a better syntax would be:

    if (expensive_computation_0() as x)<5:
         # Do something with x

And likewise for `while` loops,

    while (expensive_computation_0() as x)<5:
         # Do something with x

> My suggestion:
>
>     if expensive_computation_0() as x:
>         # Do something with x...
>     elif expensive_computation_1() as x:
>         # Do something with x...
>     elif expensive_computation_2() as x:
>         # Do something with x...

... this simpler form does look reasonable. The "as" part will *only*
come at the end of the expression, and it *always* applies to the
whole expression, so it's fairly clear.

Agreed, this looks reasonable to me.

These are special cases of PEP 379, "Adding an Assignment Expression" (http://www.python.org/dev/peps/pep-0379/) from 2009, which has been withdrawn. Perhaps it would be better received if restricted to if/while conditions.

Nathan