Definir Listas Globales

Ernesto Revilla aerd en retemail.es
Mie Mar 10 02:09:45 CET 2004


Hola

Te recomiendo que te leas bien el tutorial de Python, donde hace referencia a los espacios de nombres (Namespaces).

Cuando haces asignaciones dentro de una función, a menos que dentro de esa misma función pongas el 'global' oportuno, siempre se usan variables globales:

a=1

def func1():
   a=2   # no establece la variable global a 2!!!

def func2():
   global a
   a=3    # sí establece la variable global

Si haces una lectura desde una función, Python busca primero en el espacio local a la función y después en el espacio global, pero eso la lectura, no la escritura!!!

Ten en cuenta, que lo único que haces es ligar una variable a una cosa que ya existe (los números)

Cuidado con las listas y las demás estructuras mutables:
lista=[1,2,3]

def func():
    lista.append(4)
# en este caso, al no encontrar lista en el espacio local, lo localiza en el global. Después le aplica a ese objeto el método append con el argumento 4. Así que se ha modificado una lista al que apunta una variable global (del espacio global).

Volviendo a tu ejemplo:
No es bonito eso:

def func1():
   global lista
   lista=[1,2,3]

def func2():
   lista=['a','b','c']

Primero, si quieres acceder a esa lista desde los dos sitios, pon:

lista=[]    # ponlo al principio del programa

def func1():
    global lista      # ligamos a la variable global a una lista diferente
    lista=[1,2,3]

def func2():
    global lista    # lo tienes que poner de nuevo, para que Python sepa que
                        # vas a hacer referencia de nuevo a una variable global
    lista=['a','b','c']  # liga otra lista diferente a var. global lista


Además, es feo usar variables globales. Yo lo hago sólo algunas veces, al principio, para que un programa entero se comporte de una manera u otra (como los #define de C).

Espero haberme exlicado.

Erny



----- Original Message ----- 
From: "Aldo Hugo Vargas Rodriguez" <aldo en gmc.dynip.com>
To: <python-es en aditel.org>
Sent: Wednesday, March 10, 2004 1:27 AM
Subject: [Python-es] Definir Listas Globales


> Hola es mi primer post pero tengo un problema.
> 
> tengo como primera funcion, una que me carga los variables globales de
> un desarrollo que estoy haciendo pero me tope con un pequeño problema.
> Para valores enteros las varibales globales me las toma sin ningun
> inconveniente. Pero para la definicion de listas no los asigna como
> varibales globlales a menos que las defina dentro de la funcion que
> tengo que realizar su asignación es decir..
> 
> def uno:
> global uvta
> . 
> .
> .
> uvta = [0,0,0]
> 
> def dos:
> . 
> .
> .
> uvta = [2L, 4.230001, 5.26]
> 
> if __name__ == '__main__':
> dos()
> print uvta
> 
> Pero no le asigna ningun valor a menos quen en dos() defina la varibale
> uvta como global
> 
> A alguien le ha pasado esto... gracias de antemano.
> 
> 
> _______________________________________________
> 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