[Python-ideas] A PEP on introducing variables on 'if' and 'while'

Steven D'Aprano steve at pearwood.info
Sun Jun 10 09:19:58 EDT 2018

On Sun, Jun 10, 2018 at 08:08:13AM -0400, Juancarlo Añez wrote:

> >     while (condition := expression) as flag:
> >         ...
> >
> Ah! Are the parenthesis necessary there?

It's your PEP, you tell us.

> > Accepting "while/if as name" would remove much (but not all) of the
> > motivation for assignment expressions, while accepting assignment
> > expressions would make a dedicated while/if as name syntax unnecessary.
> Most of the arguments in favor of ':=' have been through examples of
> generators in which the introduced name is used within, with the if/while
> case often forgotten.

Indeed. I think that the generator/comprehension use-cases for 
assignment expressions are not the most compelling. They're important, 
but at the point you need to use assignment inside a comprehension, 
there's a good argument that it *may* be time to refactor to a loop. I 
think the while/if examples are even more important.

> There can be cases in which combining both syntaxes is useful:
> x = None
> while compute(x := v for v in next_series_value(x)) as comp:
>     ...
>     x = comp

But if you have assignment expressions, you don't need "as".

x = None
while comp := compute(x := v for v in next_series_value(x)):
    x = comp

> Finding a real-world example of something like the above synthetic example
> would be in favor of the orthogonality.

As the PEP author, that's your job.


More information about the Python-ideas mailing list