[Python-Dev] Using and binding relative names (was Re: PEP for Better Control of Nested Lexical Scopes)
Steven Bethard
steven.bethard at gmail.com
Sun Feb 26 18:17:31 CET 2006
On 2/25/06, Almann T. Goo <almann.goo at gmail.com> wrote:
> On 2/23/06, Steven Bethard <steven.bethard at gmail.com> wrote:
> > On 2/22/06, Almann T. Goo <almann.goo at gmail.com> wrote:
> > > def incrementer_getter(val):
> > > def incrementer():
> > > val = 5
> > > def inc():
> > > ..val += 1
> > > return val
> > > return inc
> > > return incrementer
> >
> > Sorry, what way did the user think? I'm not sure what you think was
> > supposed to happen.
>
> My apologies ... I shouldn't use vague terms like what the "user
> thinks." My problem, as is demonstrated in the above example, is that
> the implicit nature of evaluating a name in Python conflicts with the
> explicit nature of the proposed "dot" notation. It makes it easier
> for a user to write obscure code (until Python 3K when we force users
> to use "dot" notation for all enclosing scope access ;-) ).
Then do you also dislike the original proposal: that only a single dot
be allowed, and that the '.' would mean "this name, but in the nearest
outer scope that defines it"? Then:
def incrementer_getter(val):
def incrementer():
val = 5
def inc():
.val += 1
return val
return inc
return incrementer
would do what I think you want it to[1]. Note that I only suggested
extending the dot-notation to allow multiple dots because of Greg
Ewing's complaint that it wasn't enough like the relative import
notation. Personally I find PJE's original proposal more intuitive,
and based on your example, I suspect so do you.
[1] That is, increment the ``val`` in incrementer(), return the same
``val``, and never modify the ``val`` in incrementer_getter().
STeVe
--
Grammar am for people who can't think for myself.
--- Bucky Katt, Get Fuzzy
More information about the Python-Dev
mailing list