[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