isPrime works but UnBoundLocalError when mapping on list
Fredrik Lundh
fredrik at pythonware.com
Wed Jul 16 09:01:27 EDT 2008
Andreas Tawn wrote:
> I don't have experience of too many other languages, but in C++ (and I
> guess C)...
That's invalid C (you cannot declare variables in the "for" statement
itself, at least not in C89). And back in the old days, some C++
compilers did in fact leak declarations from "for" loops, and others
didn't...
> Is the Python behaviour just a happy side effect of the target list
> assignment or specific design decision?
I'd say it all follows from the fact that Python doesn't have variable
declarations; if you want to stick to the principle that variables can
introduced simply by assigning to them, you cannot introduce new blocks
nilly-willy. So none of the basic structural elements do that;
variables introduced inside an "if" statement or a "for-in" statement
are no different from variables introduced outside them. And intro-
ducing a new block only for the loop variables would be confusing and
rather impractical, given how fundamental looping over sequences and
iterables are in Python.
(the discussions about loop variables in list comprehensions and
generator expressions are a bit different; they're expressions, not
statements, and shouldn't really do assignments as a side effect, any
more than function calls should leak parameter names into the calling
scope...)
</F>
More information about the Python-list
mailing list