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