[Python-Dev] Informal educator feedback on PEP 572 (was Re: 2018 Python Language Summit coverage, last part) (original) (raw)

Nick Coghlan ncoghlan at gmail.com
Sat Jun 30 08:57:01 EDT 2018


On 30 June 2018 at 19:35, Steven D'Aprano <steve at 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 | ncoghlan at gmail.com | Brisbane, Australia



More information about the Python-Dev mailing list