[Python-Dev] Assignment expression and coding style: the while True case

Rob Cliffe rob.cliffe at btinternet.com
Wed Jul 4 21:25:07 EDT 2018



On 05/07/2018 01:25, Tim Peters wrote:
>
>     == Pattern 5, two variables ==
>
>     while True:
>         m = match()
>         if not m:
>             break
>         j = m.end()
>         if i == j:
>             break
>         ...
>
>     replaced with:
>
>     while (m := match()) and (j := m.end()) == i:
>
I assume (sorry to be pedantic :-)) this is a typo for
         while (m := match()) and (j := m.end()) != i:
>
>         ...
>
>     Maybe we reached here the maximum acceptable complexity of a single
>     Python line? :-)
>
>
> It's at my limit.  But, as in an earlier example, I'd be tempted to do 
> "the obvious part":
>
>     while m:= match():
>         j = m.end()
>         if i == j::
>             break
>
> Then the start reads like "while there's something _to_ look at::" and 
> the body of the loop is happily guaranteed that there is.
>
> .
Or you could compromise with this "intermediate density" version that 
does two "obvious parts":

     while m:=match():
         if  (j:=m.end()) == i:
             break

(or as I might write it

     while m:=match():
         if  (j:=m.end()) == i:  break

).
Some might prefer this as shorter than non-AE version but less dense 
than the one-liner.  Others might not. /De gustibus non est disputandum./
My conclusion:  Assignment expressions are - like any other Python 
feature - a tool, to be used with discretion and judgement.  Not the 
start of a competition to see who can write the most slick/unreadable code.
Regards
Rob Cliffe
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20180705/e42986fe/attachment.html>


More information about the Python-Dev mailing list