Re: [Python-es] Variable global

2010-09-06 Por tema Arnau Sanchez
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

2010-09-06 Por tema José Luis Torre Hernández
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

2010-09-06 Por tema Arnau Sanchez
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

2010-09-05 Por tema Narcis Garcia - GiLUG
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

2010-09-05 Por tema Sergio Soto Núñez
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

2010-09-05 Por tema Chema Cortes
-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/