<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jan 5, 2018 at 1:57 AM, Nathaniel Smith <span dir="ltr"><<a href="mailto:njs@pobox.com" target="_blank">njs@pobox.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">PEP 3104 says:<br>
<br>
"""<br>
A shorthand form is also permitted, in which nonlocal is prepended to<br>
an assignment or augmented assignment:<br>
<br>
nonlocal x = 3<br>
<br>
The above has exactly the same meaning as nonlocal x; x = 3. (Guido<br>
supports a similar form of the global statement [24].)<br>
"""<br>
<br>
The PEP metadata says it was approved and implemented in 3.0, yet this<br>
part never seems to have been implemented:<br>
<br>
Python 3.7.0a3+ (heads/master:53f9135667, Dec 29 2017, 19:08:19)<br>
[GCC 7.2.0] on linux<br>
Type "help", "copyright", "credits" or "license" for more information.<br>
>>> def f():<br>
...     x = 1<br>
...     def g():<br>
...         nonlocal x = 2<br>
  File "<stdin>", line 4<br>
    nonlocal x = 2<br>
               ^<br>
SyntaxError: invalid syntax<br>
<br>
Was this just an oversight, or did it get rejected at some point and<br>
no-one remembered to update that PEP?<span class="HOEnZb"></span><br></blockquote></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">I don't recall (though someone with more time might find the discussion in the archives or on the tracker). It was never implemented and I think it shouldn't be. So we might as well update the PEP. It wouldn't be particularly useful, since (by definition) the function that declares the nonlocal variable is not its owner, and hence it's unlikely to make sense to initialize it here. The same reasoning applies to global BTW.<br clear="all"></div><div class="gmail_extra"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</div></div>