Nested scopes: why is it weird?

Paul Prescod paulp at
Fri Sep 7 23:20:29 CEST 2001

Cliff Wells wrote:
> > a = 5
> >
> > def foo():
> >    a = 6
> >
> > It would be better to require one of the names to be changed.
> It silently does the right thing.  Changing the value of a variable from an
> enclosing scope is a _bad_ idea.  This is what is called a "side effect" and
> was one of the things structured programming was created to prevent.  

Side effects are a fundamental part of Python programming. If they
weren't, Python wouldn't have the "global" keyword. I think it is great
that Python requires you to be explicit when you want to overwrite a
global variable. I think it should similarly reqiure you to be explicit
when you want to shadow one. Or it could simply disallow the shadowing
-- it isn't very useful anyhow. Just call the inner a "inner_a".

Take a recipe. Leave a recipe.  
Python Cookbook!

More information about the Python-list mailing list