Re: [Python-es] Variable global
On Mon, 06 Sep 2010 01:06:52 +0200 Chema Cortes wrote: def CargarConfiguracion(Configuracion): Configuracion[FicheroConf] = /etc/miprograma.conf ... Aquí Configuración (la variable global?) la estás pasando como argumento, o sea, es local dentro de la función. Es cierto que es local, pero siendo un objeto mutable esos cambios deberían reflejarse en la variable global, es raro que no funcione (aunque coincido en que hacerlo de esta forma no es lo más recomendable). ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Variable global
Hola: He definido algunas variables para ver si puedo explicar la diferencia de funcionamiento que planteas: entorno=alfa # entorno es variable global definida implícitamente def modifica_local(entorno): entorno = beta # entorno es local por ser parámetro formal modifica_local(entorno) #variable global no modificada def modifica_no(): entorno=delta # entorno es local definida implícitamente modifica_no() #variable global no modificada def modifica_si(): global entorno entorno = este es el nuevo valor de la variable entorno modifica_si() #variable global modificada ya que no existe variable local en este último caso #al indicar en el cuerpo de la función que entorno es global. Espero que a alguien le aclare el asunto Saludos José Luis Torre ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Variable global
On Mon, 6 Sep 2010 12:55:33 +0200 José Luis Torre Hernández wrote: entorno=alfa # entorno es variable global definida implícitamente def modifica_local(entorno): entorno = beta # entorno es local por ser parámetro formal modifica_local(entorno) #variable global no modificada Pero no es lo mismo que la variable de configuración sea mutable (diccionario) que no lo sea (cadena): config = {} def load_config(llamale_como_quieras): llamale_como_quieras[hola] = 1 print config # {} load_config(config) print config # {hola: 1} ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] Variable global
Hola, uso una variable global para almacenar la configuración de mi programa, la cual relleno mediante una función así: def CargarConfiguracion(Configuracion): Configuracion[FicheroConf] = /etc/miprograma.conf ... Que luego necesito usar dentro de una clase así: class InterfazPrincipal(wx.Frame): global Configuracion ... Y en el núcleo del programa procedo así: LaAplicacion = wx.App(False) CargarConfiguracion(Configuracion) InterfazPrincipal(None, titulo) LaAplicacion.MainLoop() El problema es que dentro de la clase no parece que se entere de los valores de la variable global, porque al intentarla usar me dice: KeyError: 'FicheroConf' ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Variable global
Debes definirla, aunque sea una cadena vacía, fuera de toda función, yo suelo hacerlo debajo de los import __ If it WalksLikeaDuck and talks like a duck, it must be a duck. David Thomas 2010/9/5 Narcis Garcia - GiLUG informat...@actiu.net Hola, uso una variable global para almacenar la configuración de mi programa, la cual relleno mediante una función así: def CargarConfiguracion(Configuracion): Configuracion[FicheroConf] = /etc/miprograma.conf ... Que luego necesito usar dentro de una clase así: class InterfazPrincipal(wx.Frame): global Configuracion ... Y en el núcleo del programa procedo así: LaAplicacion = wx.App(False) CargarConfiguracion(Configuracion) InterfazPrincipal(None, titulo) LaAplicacion.MainLoop() El problema es que dentro de la clase no parece que se entere de los valores de la variable global, porque al intentarla usar me dice: KeyError: 'FicheroConf' ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Variable global
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 El 05/09/10 14:59, Narcis Garcia - GiLUG escribió: Hola, uso una variable global para almacenar la configuración de mi programa, la cual relleno mediante una función así: Yo intentaría evitar usar variables globales en todo momento. El código queda poco claro y difícil de mantener. Es mejor colocar toda configuración en un módulo aparte e importarlo allí donde te haga falta. Así sabrás de dónde vienen las variables y, sobre todo, asociar a cada cosa su propio espacio de nombres para que no se pisen entre sí. Respondiendo a tu pregunta concreta, la declaración explícita de una variable como global sólo tiene un cometido: su modificación. Si sólo vas a leer su valor, entonces es global implícitamente. def CargarConfiguracion(Configuracion): Configuracion[FicheroConf] = /etc/miprograma.conf ... Aquí Configuración (la variable global?) la estás pasando como argumento, o sea, es local dentro de la función. Que luego necesito usar dentro de una clase así: class InterfazPrincipal(wx.Frame): global Configuracion ... Como te decía, si la clase no modifica la variable global, entonces esta declaración de global es puramente decorativa (no está mal, pero sin ella funciona todo igual). Y en el núcleo del programa procedo así: LaAplicacion = wx.App(False) CargarConfiguracion(Configuracion) InterfazPrincipal(None, titulo) LaAplicacion.MainLoop() El problema es que dentro de la clase no parece que se entere de los valores de la variable global, porque al intentarla usar me dice: KeyError: 'FicheroConf' Si es verdad que éste es el núcleo, entonces no entiendo el porqué del error. Habría que ver más código y ver dónde se crea la variable global. De todos modos, si usas algún debugger de python te será fácil ir siguiendo las modificaciones de las variables globales y comprobar qué está pasando. -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJMhCKIAAoJEFdWyBWwhL4FQ4YH/RVT/IHSSK459DuLEdAhEaZJ ij8sJ/G8HSEoTn4YMkjav5avLc9rpUcR+UhgCRC5bPHKRJc8JXQD4zBcF4TmOq3+ K+frSX2GfoFvDKnIE8Bl3ENIKFBjOqEecRMgS2pIo2WjWNacvhRL9ZlW3wVW2BV1 gZaX2yU9AThaLv0oqNnefL+phEIHRCgxfvFTH9ixkkZerCYVDWBDJNiP7NhxHzcU 1Ex39I0zL5qDwg2bwlZ0zCq15difAzC11v54QNDkkwc+GhywNcgHN+4gjCwICVhq RY+rCD/Jkw+KAIsn+VjKJncOM10ZAS6SlT1laCbo61g7z+KB6CVPRsWx4MFcAIo= =kXEs -END PGP SIGNATURE- ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/