# [Python-ideas] Before and after the colon in funciton defs.

Guido van Rossum guido at python.org
Sat Sep 24 02:54:47 CEST 2011

```On Fri, Sep 23, 2011 at 5:35 PM, ron adam <ron3200 at gmail.com> wrote:
> On Sat, 2011-09-24 at 11:12 +1200, Greg Ewing wrote:
>> > On Fri, 2011-09-23 at 11:11 +1000, Nick Coghlan wrote:
>> >
>> >>Framing the idea that way also suggests a fairly obvious spelling:
>> >>
>> >>    def f(x):
>> >>        nonlocal i=i # Use 'f' as a closure over *itself*
>> >>        return x + i
>>
>> Sorry, but that spelling is very far from obvious to me.
>> According to the current meaning of 'nonlocal', it looks like
>> a no-op. I don't understand the reasoning that leads from
>> there to your proposed semantics.
>>
>> You'll also have to explain how that reasoning applies to
>> the following variations:
>>
>>    nonlocal i = i + i
>>    nonlocal i = i + j
>>    nonlocal i = j + k
>
>
> Here's my view of what would happen, but you don't say weather or not
> those are defined together or if they are separate cases.
>
>
>    nonlocal i
>
>
>
>    nonlocal i=i
>
> Creates a new 'i' in a functions own frame with the value of 'i' from a
> parent frame at the time the function is defined.
>
> (Note, it also makes sense to do it on the first time the function is
> called.  I'm not sure there is any advantage to that.)
>
>
> Once the function is called, the access of 'i' would be in the local
> frame, and not effect the parent frames 'i' because the local 'i' is
> found first.
>
> As for the various cases, they would work the same except the initial
> value would be different.

The only sensible meaning that could possibly assigned to "nonlocal
<var> = <expr>" is that it should be strictly equivalent to

nonlocal <var>
<var> = <expr>

Anything else is too confusing for our users.

So your proposal is right out.

--
--Guido van Rossum (python.org/~guido)

```