<p>I liked the setattribute decorator. Also, static variables in C are just another way to do it (as opposed to TOOWTDI). The minor namespacing improvement isn't worth the unobvious "nonlocal .. as .." syntax in my mind.</p>

<p>Pardon my android top-posting,</p>
<p>--Yuval</p>
<div class="gmail_quote">On Sep 26, 2011 9:04 AM, "Masklinn" <<a href="mailto:masklinn@masklinn.net">masklinn@masklinn.net</a>> wrote:<br type="attribution">> On 2011-09-26, at 14:26 , Alex Gaynor wrote:<br>
>> Nick Coghlan <ncoghlan@...> writes:<br>>>>    i = 88<br>>>> <br>>>>    def f():<br>>>>        nonlocal i from 17<br>>>>        print(i)<br>>>>        i += 1<br>
>>> <br>>>>  def outer():<br>>>>    i = 17<br>>>>    def f():<br>>>>        nonlocal i<br>>>>        print(i)<br>>>>        i += 1<br>>>>    return f<br>
>>> <br>>>>>>> f = outer()<br>>> <br>>> You had me, you really did.  Right up until you showed the current equivalent.  <br>>> This strikes me as a few things.<br>>> <br>
>> Most importantly, as you noted yourself, a pretty rare case, even in C static <br>>> variables are probably the rarest scope of variable.  This strikes me as a) not <br>>> saving very much code, it's like crappy HFS instead of real sugar ;), and b)<br>
>> not adding fundamental value, I think both blocks of code are equally readable.  <br>>> Other examples of syntatic sugar, such as decorators, have code motion<br>>> properties  that let you think about code in the places that makes sense, and I<br>
>> don't think this has that.<br>>> <br>> An other thing which strikes me as weird is that the proposal is basically the<br>> creation of private instance attribute on functions. Could you not get the same<br>
> by actually setting an attribute on the function (this can not be used in<br>> lambdas in any case)?<br>> <br>>     def f():<br>>         print(f.i)<br>>         f.i += 1<br>>     f.i = 17<br>> <br>
> and some of the verbosity (but mostly reverse-reading) could be sucrosed-away<br>> with a decorator:<br>> <br>>     @setattribute(i=17)<br>>     def f():<br>>         print(f.i)<br>>         f.i += 1<br>
> <br>> because as far as I can tell, if this can make it there is little justification for<br>> keeping an explicit `self` (among other things).<br>> <br>> This proposal also does not help with the "reverse argument hack" in lambdas, since<br>
> it's using a statement.<br>> _______________________________________________<br>> Python-ideas mailing list<br>> <a href="mailto:Python-ideas@python.org">Python-ideas@python.org</a><br>> <a href="http://mail.python.org/mailman/listinfo/python-ideas">http://mail.python.org/mailman/listinfo/python-ideas</a><br>
</div>