On 30 June 2018 at 19:35, Steven D'Aprano <st...@pearwood.info> wrote: > So I think Q1 is the critical one. And I think the answer is, no, > they're conceptually bloody simple. They evaluate the expression on the > right, assign it to the name on the left, and return that value.
And the proposed parent local scoping in PEP 572 has the virtue of making all of the following do *exactly the same thing*, just as they would in the version without the assignment expression: ref = object() container = [item := ref] container = [x for x in [item := ref]] container = [x for x in [item := ref] for i in range(1)] container = list(x for x in [item := ref]) container = list(x for x in [item := ref] for i in range(1)) # All variants pass this assertion, keeping the implicit sublocal scope almost entirely hidden assert container == [ref] and item is ref and item is container[0] My own objections were primarily based on the code-generation-centric concept of wanting Python's statement level scoping semantics to continue to be a superset of its expression level semantics, and Guido's offer to define "__parentlocal" in the PEP as a conventional shorthand for describing comprehension style assignment expression scoping when writing out their statement level equivalents as pseudo-code addresses that. (To put it another way: it turned out it wasn't really the semantics themselves that bothered me, since they have a lot of very attractive properties as shown above, it was the lack of a clear way of referring to those semantics other than "the way assignment expressions behave in implicit comprehension and generator expression scopes"). Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com