chorrada con carga de modulos

Cesar Ortiz cesar.ortiz en gmail.com
Dom Sep 23 22:33:23 CEST 2007


Muchas gracias!!!,
Ya puedo salir de la lista de los que no sabían lo del "__main__" ;)


On 9/23/07, Gabriel Genellina <gagsl-py2 en yahoo.com.ar> wrote:
>
> En Fri, 21 Sep 2007 07:36:47 -0300, Cesar Ortiz <cesar en ortiz.name>
> escribi�:
>
> > Si tengo un modulo apps.py que tiene:
> >
> >
> > import debug
> > import apps
> >
> > def programBegin():
> >  debug.init()
>
> Oops, apps se importa a sí mismo? Un poco raro... pero igual, no tiene
> nada que ver con el problema.
>
> > 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 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í.
>
> --
> Gabriel Genellina
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es