Greg Ewing wrote:
> Ron Adam wrote:
>
>> How about limiting nonlocal to just the immediate parent scope and using
>> 'parent' as the keyword?
>
> That could lead to confusing situations. What should
> the following do:
>
> def f():
> x = 42
> def g():
> def h():
> parent x
> x = 88
>
> Should the assignment to x in h() create a name in
> the scope of g() even though there's no assignment
> in g() to establish that as its home scope? Should
> it be an error?
>
> --
> Greg
Not confusing at all. It would work just like global does in the same
situation. The parent statement here does not create a name, it only
designates
the scope where a name will be written.
I presume you meant:
def f():
x = 42
def g():
def h():
parent x
x = 88
The x would be a new local x in function g and have no effect on the x in
function f. Parent would do exactly what it means in this case, its a
reference
to a name in only the parent scope.
Unless you were to do:
def f():
x = 42
def g():
parent x
def h():
parent x
x = 88
Then all references to x would be the local x in function f.
This is what I meant that it might be possibly to pull a reference down to
inner
scopes. It gives more control on what name space you are writing to and less
chance of writing to a grandparent scope unintentionally because of a variable
name being left out, having its name changed, or has been deleted in the
immediate parent function while editing.
I also don't think this would be too much trouble as nested functions don't
tend
to be more than 2 or 3 levels deep very often and if it becomes a problem of
having too many parent statements, it's probably a good sign a class would be
better.
IMHO, and if a suitable keyword meaning parent could be found.
Ron
_______________________________________________
Python-3000 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe:
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com