[Python-Dev] assignment expressions: an alternative proposal (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Tue Apr 24 11:55:36 EDT 2018


On 25 April 2018 at 01:35, Yury Selivanov <yselivanov.ml at gmail.com> wrote:

On Tue, Apr 24, 2018 at 11:31 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:

I do think the "no name rebinding except in a while loop header" restriction would be annoying for the if/elif use case and the while use case:

while (item = getitem()) is not firstdelimiter: # First processing loop while (item = getitem()) is not seconddelimiter: # Second processing loop # etc... if (target = getfirstcandidate()) is not None: ... elif (target = getsecondcandidate()) is not None: ... elif (target = getthirdcandidate()) is not None: ... Yes, it would force users to come up with better names iff they want to use this new sugar: if (firsttarget = getfirstcandidate()) ... elif (secondtarget = getsecondcandidate()) ...

Sorry, I didn't make the intended nature of that example clear:

if (target = get_first_candidate()) is not None:
    ... # Any setup code specific to this kind of target
elif (target = get_second_candidate()) is not None:
    ... # Any setup code specific to this kind of target
elif (target = get_third_candidate()) is not None:
    ... # Any setup code specific to this kind of target
else:
    raise RuntimeError("No valid candidate found")
# Common code using target goes here

Using a separate name in each branch wouldn't solve the problem of binding the same name for the common code to use later - you'd have to put a "target = candidate_n" bit of boilerplate in each branch.

Cheers, Nick.

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



More information about the Python-Dev mailing list