En python.es posteé lo siguiente:
"Si tengo un modulo apps.py que tiene:
import debug
def programBegin():
debug.init()
Y si tengo un modulo debug.py que tiene:
DEBUG = 0
def init():
global DEBUG
DEBUG=1
if ( __name__ == "__main__") :
import apps
apps.programBegin()
print DEBUG
¿Porque al ejecutar como comando el modulo debug.py, me imprime 0? Mi no entender..."
La respuesta (por parte de Gabriel Genellina):
"La clave está en que al ejecutar debug.py directamente, se crean DOS
copias del MISMO modulo.
1) El script que estas ejecutando (debug.py) se carga como modulo
'__main__' (es decir, en sys.modules se inserta un nuevo item con
clave='__main__' y valor=el modulo debug.py).
2) Cuando apps ejecuta "import debug", Python se fija si el modulo ya esta
importado (mirando las claves de sys.modules) y como no lo encuentra, lo
lee de disco y lo inserta con clave='debug'
O sea que debug.py fue importado DOS veces. Cuando programBegin llama a
debug.init, lo que se modifica es el valor de la variable DEBUG que esta
en el modulo llamado "debug". Cuando haces el print estando dentro del
script principal (que coincide con debug.py) lo que estas imprimiendo es
la variable DEBUG que esta en el modulo llamado "__main__".
De paso, esta es justamente la razon por la que funciona la condicion:
if __name__ == "__main__":
que más de uno escribe sin tener ni idea de porqué se hace así."
No hay comentarios:
Publicar un comentario