[Python-ideas] Return expressions

Nick Coghlan ncoghlan at gmail.com
Thu Nov 20 17:21:53 CET 2014


On 21 November 2014 01:49, MRAB <python at mrabarnett.plus.com> wrote:
>
>
> On 2014-11-20 14:43, Petr Viktorin wrote:
>>
>> The "while" expresses intent, "return" caters to low-level mechanics.
>> The "nested compound statements" explanation is already not that good:
>> why does the value come first, not last? For readability*. The
>> difference between function/nested compound statements syntax and
>> comprehension syntax is already so big, and the low-level "while
>> x:"→"if not x: break" translation is so easy, that between the two the
>> readability of "while" should win.
>
> I can see the problem with 'while': if there are multiple 'for' parts, they are equivalent to nested
> 'for' loops, so you might assume that a 'while' part would also be equivalent to a nested 'while'
> loop, whereas it would, in fact, be controlling the preceding 'for' part.
>
> In other words, it would be:
>
>     for x in range(10) while x < 5:
>         ....
>
> but could be seen as:
>
>     for x in range(10):
>         while x < 5:


PEP 3142 was the last attempt at asking this question - Guido isn't
keen on the idea, so he rejected it the last time we did a pass
through the PEPs that weren't being actively worked on.

So while the odds still aren't good, a proposal that kept the
statement and expression forms consistent might still have some
chance, by proposing that the statement example above:

    for x in range(10) while x < 5:
        ....

Be equivalent to:

    for x in range(10):
        if not x < 5:
            break
        ....

That is, there'd only be one loop, rather than two.

At that point, a "while" clause in a comprehension or generator
expression would be part of that enhanced syntax, rather than a
standalone while loop.

That does also suggest another possible alternative to the "or stop()"
trick - allow *break* as an expression.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia


More information about the Python-ideas mailing list