On 7/1/06, Guido van Rossum <[EMAIL PROTECTED]> wrote:
> On 6/30/06, Steven Bethard <[EMAIL PROTECTED]> wrote:
> > BJörn Lindqvist wrote:
> > > I have often wanted something similar to that for global
> > > variables, instead of the global declaration:
> > >
> > > cache = None
> > > def init():
> > >     if not global.cache:
> > >         global.cache = init_cache()
> >
> > Redirected since this seemed like a Python 3000 kind of request.  I
> > like the idea, particularly because it coincides well with my usual
> > uses for global/globals().  Seems like it might require some changes
> > in things like eval and exec that take locals and globals dicts, but I
> > don't know how much of a drawback that is.
>
> You realize that *reading* a global doesn't need the "global." prefix,
> do you? So you could have written "if not cache: global.cache =
> init_cache()" in the function body.
>
> I'm not sure I like this asymmetry much.

I think the fix for that is to remove the "scope inheritance." I.e:

cache = None
def init():
    if not cache:
        pass

Throws a NameError because cache is not declared in function init's
scope. So you would be forced to write:

cache = None
def init():
    if not global.cache:
        global.cache = "foobar"

I like the symmetry with self in classes. YMMV

-- 
mvh Björn
_______________________________________________
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

Reply via email to