chorrada con carga de modulos

Cesar Ortiz cesar en ortiz.name
Dom Sep 23 22:40:06 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