Dumb newbie back in shell

J. Clifford Dyer jcd at sdf.lonestar.org
Tue Dec 11 09:23:41 EST 2007


The code you just posted doesn't compile successfully.

However, in your code, you probably have char_ptr defined at the module level, and you're confused because you didn't declare it as global.  Am I right?  My crystal ball has a smudge on it, but I think I can still see okay.

You can still reference module level variables that aren't declared as global, but you can't assign to them.  Or rather, when you try to, you create a new local variable that shadows the global one.

So the first time through, your char_ptr in the while expression is a module level variable, but the second time through, it references a local variable, because it has now been defined.

Cheers,
Cliff

On Tue, Dec 11, 2007 at 05:18:00AM -0800, MartinRinehart at gmail.com wrote regarding Re: Dumb newbie back in shell:
> 
> I'm less confused. If someone can explain the wisdom of this design,
> I'd be grateful.
> 
> If someone can explain why the following compiles successfully, I'd be
> even more grateful:
> 
> def get_toks( text ):
>     global line_ptr, last_line
>     while line_ptr < last_line:
>         while char_ptr < len(text[line_ptr]):
>             if matches_EOI():
>                 tokens.append( Token(EOI) )
>             elif matches_EOL():
>                 tokens.append( Token(EOL) )
>                 line_ptr += 1
>                 char_ptr = 0
> 
> Shouldn't "char_ptr" be flagged as an error, appearing in line 4
> before being a lhs in the last line?
> 
> Martin
> 
> MartinRineh... at gmail.com wrote:
> > Peter,
> >
> > question is, why did the first one work? In my real code I've got
> > module-level vars and an error msg trying to use them in a function.
> > In my test example I've got them accessed from within a function w/o
> > error message.
> >
> > I am confused.
> >
> > Martin
> >
> > Peter Otten wrote:
> > > MartinRinehart wrote:
> > >
> > > > However, here's the little tester I wrote:
> > > >
> > > > # t.py - testing
> > > >
> > > > global g
> > > > g = 'global var, here'
> > > >
> > > > def f():
> > > >     print g
> > > >
> > > > f()
> > > >
> > > > It prints 'global var, here,' not an error message. Wassup?
> > >
> > > Try it again with a modified f():
> > >
> > > def f():
> > >     print g
> > >     g = 42
> > >
> > > In Python variables that are assigned to in a function are
> > > function-local by default.
> > >
> > > Peter
> -- 
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list