Dumb newbie back in shell

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Mon Dec 10 12:08:55 EST 2007


MartinRinehart at gmail.com a écrit :
> OK, it's a scripting language.

For which definition of "scripting language" ?-)

>>>> def g():
> ...    os.remove('tokeneizer.pyc')
> ...    reload( tokeneizer )
> ...    tokeneizer.tokenize('sample_decaf.d')
> ...
> 
> But that gets me to:
> 
> ... line 110, in get_toks
> UnboundLocalError: local variable 'line_ptr' referenced before
> assignment
> 
> Here's a bit of the code, with line #s
> 
> ...
> 68 global line_ptr
> 69 global char_ptr
> ...
> 75 line_ptr = 0
> 76 char_ptr = 0
> ...
> 109 def get_toks( text ):
> 110     while line_ptr < last_line:
> ...
> So when is a global var global?

Short answer : never !-)

Long answer:

First point: "global" really means "module level" - there's no 
"application global" namespaces.

Second point: every name declared as the top-level is global - according 
to the above definition. So there's no need to declare them as such. The 
only place where you need the global statement is when you want to 
rebind a module-level name from within a function. And it's in this 
function that you need to declare the name as global.

FWIW, this is documented.

Last point: Python is not C, and it definitively doesn't have pointers. 
Trying to write C in Python is a waste of time and an experiment in 
frustration (just like trying to write language XXX in language YYY for 
any distinct values of XXX and YYY).

HTH



More information about the Python-list mailing list