<div dir="ltr"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[Nick Coghlan]</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> I'm OK with a target scope declaration construct having<br>
> lexical-scope-dependent behaviour - exactly what "nonlocal NAME" will<br>
> do depends on both the nature of the current scope,</blockquote><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial">[Greg Ewing]</div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yes, but my point is that having an explicit "parentlocal" scope<br>
declaration doesn't help to make anything more orthogonal,<br>
because there's no way it can have *exactly* the same effect<br>
as a comprehension's implicit parent-local scoping.<br></blockquote><div><br></div><div>Sure it can - but I already explained that.<br><br>This is the analogy to "nonlocal" Nick is making:  neither "nonlocal" nor "parentlocal" tell you which scope a declared name _does_ belong to.  Instead they both say "it's not this scope" and specify algorithms you can follow to determine the scope to which the name does belong.<br><br>"parentlocal" isn't an accurate name because the owning scope may not be the parent block at all, and it may even be a synonym for "global".  I think "by hand" translations of nested comprehensions into nested functions are clearer _without_ the "parentlocal" invention.- then you have to be explicit about what the context requires.  Nick hates that because it isn't uniform.  I like that because I don't want to pretend a non-uniform thing is uniform ;-)  The only real use case here is synthesizing nested functions to implement comprehensions/genexps.<br><br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In other words, taking a comprehension and manually expanding<br>
it into a function with parentlocal declarations wouldn't<br>
give you something exactly equivalent to the original.<br>
If that's the purpose of having an explicit parentlocal,<br>
then it fails at that purpose.<br></blockquote><div><br>You can add (a sufficient number of) parentlocal declarations to get the precise intended semantics.  Then again, that can also be done today (without the "parentlocal" invention).<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
If that's *not* the purpose, then I'm not really sure what<br>
the purpose is, because I can't think of a situation where<br>
I'd choose to use parentlocal instead of nonlocal with an<br>
explicit assignment in the outer scope.<br></blockquote><div><br>For example, if the name is declared "global" in the outer scope, you'll get a compile-time error if you try to declare it "nonlocal" in the contained scope.  "parentlocal" adjusts its meaning accordingly, becoming a synonym for "global" in that specific case.<br><br></div></div></div>