lvalues and the lgb rule
Tim Peters
tim.one at home.com
Fri Jul 6 18:09:31 EDT 2001
[Michael P. Soulier]
> ...
> In Python, previously unused lvalues cause that variable to
> be dynamically declared.
This is a flawed mental model: the local vs non-local distinction is made
at compile-time, by static inspection of the program text. There's nothing
dynamic about that (in the absence of "import *" and "exec" abuses).
> x = 1 # if x did not previously exist, following the LGB rule, it is
> # declared dynamically here
Not dynamic. Just look at the code in an editor: if a name is bound
anywhere within a code block, and isn't declared in a "global" stmt, then
that name is local throughout the entire code block.
> Now, while this is great for scripting, it can cause major
> headaches with large programs if you're a bad typist.
I expect bad typists have lots of other problems writing code too <wink>.
> It can declare new variables accidentally, when you wanted to assign
> to an existing one...
>
> myvar = 5
> .
> .
> myver = othervar
A tool like PyChecker will detect that, in the example exactly as given,
"myvar" and "myver" are *both* unreferenced, and flag both lines with
warnings.
> ...so here my typo of myver instead of myvar dynamically creates
> myver instead of assigning othervar to myvar.
It caused the compiler to believe you have two local vars, myvar and myver;
it makes no difference which one comes first; space for both is allocated
(in a sense) at compile-time.
> It can also accidentally obscure globals.
>
> So, while the simple answer would be, "don't do that", we all
> know that accidents happen. So, I was wondering if there is a way to
> force declarations of variables to catch this kind of thing.
Not in Python: "global" is its only declaration statement. Use PyChecker:
http://sf.net/projects/pychecker/
> Is there, or is there anything in the works, to assign with very large
> programs?
The size of the program doesn't really matter; regardless of program size,
if you don't keep your individual functions and methods to well under a
screen of code almost all the time, you're going to have lots of problems
(in Python or any other language; it may even be worse in Python, because
indendation for grouping really doesn't work well when code blocks slobber
over screen pages; that's one of the clever pressures in Python *nudging*
you toward writing better code).
guido-can-lead-you-to-clarity-but-he-can't-stop-you-from-peeing-in-
the-stream<wink>-ly y'rs - tim
More information about the Python-list
mailing list