2 questions about scope

Andrew Dalke adalke at mindspring.com
Mon Oct 25 21:25:41 CEST 2004

Neal D. Becker wrote:
> Actually, these don't introduce a block in c++ either.  The braces do.

In C++

for (int i=0; i<100; spam(i), ++i)

the 'i' is in the for statement's scope even though there
are no braces.

To respond to the OP's question, one big difference between
C++ and Python's scoping systems is that Python doesn't have
a distinct variable declaration.  In C++ you could say

   char i[] = "something";
   for (int i=0; i<100; i++) {

and the compiler knows you want a new variable 'i'.

In Python, the equivalent might be

   i = "something"
   for i in range(100):

There's nothing to tell Python that the 'i' used
in the for statement is different than the i in the
outer scope, so it assumes you meant the same variable.

The only scopes created in Python are for modules,
classes, and functions.  As I pointed out a couple
weeks ago, you could fake scope with a class statement,
as in

   i = "something"
   class scope:
     for i in range(100):

but you really shouldn't.  Or use a function scope,

   i = "something"
   def scope():
     for i in range(100):

I mostly use the last when I want some non-trivial
initialization in my module and don't want the various
variables hanging around in the process space.  I'll
also follow it up with a "del scope" so that no one
can reference the initialization code.

				dalke at dalkescientific.com

More information about the Python-list mailing list