Newbie: Why Does This Work This Way...Global Variables And The Signal Module....
Markus Schaber
markus at schabi.de
Fri Sep 14 06:05:26 EDT 2001
Hi,
John Branthoover <jbranthoover at yahoo.com.NOSPAM> schrub:
> I have written a simple program to break out of a endless loop by
> hitting control C, see below. This program works OK but I don't
> understand why I have to define the global variable "Loop_Run" twice
> to get it to work. I thought that you had only to define a global
> variable once at the beginning of a program and that made it available
> to rest of the module.
The global statement is no definition in this way. All variables are
usually from their local scope, so if you do
def f():
loop_run=0
then this sets the variable local to the current function. The global
statement just tells the byte-code compiler to use the global variable
loop_run during the current function whenever anything accesses
loop_run. Imagine this as some kind of "search redirection" which says
"don't use local scope, but global scope for this name".
So you have to tell this in every function and method you need it.
Also remember that the variable is created on the first write access to
it. A "definition" - as known from static languages - is not knowt to
python.
Another point is that the python interpreter allows omitting the global
statement whenever the variable is only read and not written in the
function - because in this case, there can't be a local variable.
So you could rewrite your example as follows:
#!/usr/local/bin/python
import signal
def signal_handler(signal, frame):
global Loop_Run
Loop_Run=0
print 'Signal Handler',Loop_Run
def Main():
while Loop_Run<>0:
print 'Loop is running because Loop_Run = ',Loop_Run
print 'Loop is stopped because Loop_Run = ',Loop_Run
Loop_Run=1
signal.signal(signal.SIGINT, signal_handler)
if __name__=='__main__':
Main()
markus
--
"The strength of the Constitution lies entirely in the determination of
each citizen to defend it. Only if every single citizen feels duty
bound to do his share in this defense are the constitutional rights
secure." -- Albert Einstein
More information about the Python-list
mailing list