On Sun, Jun 24, 2018 at 4:33 PM, Nick Coghlan <ncogh...@gmail.com> wrote: > On 24 June 2018 at 15:56, Steven D'Aprano <st...@pearwood.info> wrote: >> On Sun, Jun 24, 2018 at 02:33:59PM +1000, Nick Coghlan wrote: >> >>> Given that PEP 572 *is* proposing implicit comprehension state export, >> >> "Implicit" and "explicit" are two terms which often get misused to mean >> "I don't like it" and "I do like it". >> >> Making the intentional choice to use an assignment expression is not >> really "implicit" in any meaningful sense. > > No, it's actually implicit: there's an extra "global NAME" or > "nonlocal NAME" in the equivalent code for a comprehension that isn't > there in the as-written source code, and doesn't get emitted for a > regular assignment expression or for the iteration variable in a > comprehension - it only shows up due to the defined interaction > between comprehensions and assignment expressions.
The implicit "nonlocal NAME" is only because there is an equally implicit function boundary. Why is there a function boundary marked by square brackets? It's not saying "def" or "lambda", which obviously create functions. It's a 'for' loop wrapped inside a list display. What part of that says "hey, I'm a nested function"? So if there's an implicit function, with implicit declaration of a magical parameter called ".0", why can't it have an equally implicit declaration that "spam" is a nonlocal name? ChrisA _______________________________________________ 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