[Python-Dev] global variable modification in functions [Re: elimination of scope bleeding of iteration variables]
Guido van Rossum
guido at python.org
Mon May 1 17:38:13 CEST 2006
On 5/1/06, Phillip J. Eby <pje at telecommunity.com> wrote:
> While I agree that item #1 is a non-starter, it seems to me that in the
> case where the compiler statically knows a name is being bound in the
> module's globals, and there is a *non-argument* local variable being bound
> in a function body, the odds are quite high that the programmer forgot to
> use "global". I could almost see issuing a warning, or having a way to
> enable such a warning.
>
> And for the case where the compiler can tell the variable is accessed
> before it's defined, there's definitely something wrong. This code, for
> example, is definitely missing a "global" and the compiler could in
> principle tell:
>
> foo = 1
>
> def bar():
> foo+=1
>
> So I see no problem (in principle, as opposed to implementation) with
> issuing a warning or even a compilation error for that code. (And it's
> wrong even if the snippet I showed is in a nested function definition,
> although the error would be different.)
>
> If I recall correctly, the new compiler uses a control-flow graph that
> could possibly be used to determine whether there is a path on which a
> local could be read before it's stored.
Sure. This is a quality of implementation issue.
--
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list