[Python-Dev] Visibility scope for "for/while/if" statements

Gareth McCaughan gmccaughan at synaptics-uk.com
Fri Sep 23 14:48:24 CEST 2005

On Thursday 2005-09-22 20:00, Josiah Carlson wrote:

[Alexander Myodov:]
> > But for the "performance-oriented/human-friendliness" factor, Python
> > is anyway not a rival to C and similar lowlevellers. C has
> > pseudo-namespaces, though.
> C does not have pseudo-namespaces or variable encapsulation in for loops.
> Ah hah hah!  Look ladies and gentlemen, I caught myself a troll!  Python
> does not rival C in the performance/friendliness realm?  Who are you
> trying to kid?

I think you've misunderstood Alex here; he's saying that Python
and C don't occupy the same region of the spectrum that runs
from "high performance, human-unfriendly" to "lower performance,
human friendly". Which is correct, unlike some other things he's
said :-).

> > "for (int i = 0; i < 10; i++)" works fine nowadays.
> I'm sorry, but you are wrong.  The C99 spec states that you must define
> the type of i before using it in the loop.  Maybe you are thinking of
> C++, which allows such things.

No, Alex is right on this one too. Maybe you are thinking of C89,
which forbids such things.  The for statement

       [#1]  Except for the behavior of a continue statement in the
       loop body, the statement

               for ( clause-1 ; expr-2 ; expr-3 ) statement

       and the sequence of statements

                       clause-1 ;
                       while ( expr-2 ) {
                               expr-3 ;

       are equivalent (where clause-1 can be  an  expression  or  a
       123Thus,  clause-1  specifies  initialization  for the loop,
          possibly declaring one or more variables for use  in  the
          loop;  expr-2,  the  controlling expression, specifies an
          evaluation  made  before  each   iteration,   such   that
          execution  of  the  loop  continues  until the expression
          compares equal to 0; expr-3 specifies an operation  (such
          as  incrementing) that is performed after each iteration.
          If clause-1 is a  declaration,  then  the  scope  of  any
          variable  it declares is the remainder of the declaration
          and the entire loop, including the other two expressions.

(This is from a late draft of the C99 spec; I'm fairly sure
the final version is no different.)


More information about the Python-Dev mailing list