Op 27/10/2021 om 17:05 schreef Christman, Roger Graydon:
I'm going to provide two loop-and-a-half segments to illustrate my 
interpretation
of this PEP and the purpose of the walrus operator:

[ first example ]

Now contrast with this example:

Without the walrus:

replay = True
while replay:
     play_game()
     replay = input("Play again? ") in ['y','Y','yes','Yes']

(I think it silly to ask about playing again at first).

With the walrus:

replay = None
while replay==None or (replay := input("Play again? ") in ['y','Y','yes','Yes']:
      play_game()

To use the walrus operator here, I have to fabricate a value that would
allow me to bypass the input operation, that cannot be otherwise produced.
I do not find this second version any clearer or more intuitive than the first
(and the PEP did emphasize the value of clarity).

But the above is not a one and a half loop. The above is essentially a do
loop (repeat loop in pascal), where you have the test at the end of the
loop body. But because python doesn't have that loop you have to use a
boolean to control the loop that is initialized to True and then later
assign that boolean the result of the test which you use to control this
loop.

Should I think it worth the trouble to rewrite your example, quod non,
it would be like below, with that unneeded list.

    while [
        play_game(),
    input("Play again? ") in ['y', 'Y', 'yes', 'Yes']][-1]:
        pass

--
Antoon Pardon.

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to