pasar valor de variables...

Chema Cortes py en ls-l.org
Vie Sep 9 11:57:15 CEST 2005


David Pantoja escribió:
> Hola a toda la lista:
> 
> estaba preguntandome como es que puedo pasar variables de una funcion
> a otra, esto es:
> 
> 
> def primera():
>       variable = valor
> 
> def segunda():
>       print variable
> 
> OK, no se vale lo de definir la variable de manera global, ya que este
> valor lo obtengo de esa funcion(primera).
> 
> ojala que alguien me pueda ayudar....
> 
> es algo asi como importar las variables de una funcion a otra o no se....

Ya lo he comentado en algún mensaje bastante reciente. Las funciones son
objetos y como tales tienen atributos:


def primera():
   primera.variable=valor

def segunda():
   print primera.variable


Para evitar problemas con el orden de ejecución, lo mejor es asegurarnos
que existe el atributo con has_attr() y getattr(). Por ejemplo:

def segunda():
   print getattr(primera,"variable", 0)  # si no existe, imprime un 0



Técnicamente, lo de "importar" variables de una función se podría hacer
si python tratara bien las clausuras (closures) como, por ejemplo, hace
ruby. Lo más parecido, de momento, son los generadores. Casi cualquier
código que necesite clausuras se puede hacer con generadores (aún mejor
con los nuevos generadores de python 2.5).


El siguiente código lo pongo como truco. Nunca te tiene que hacer falta
emplear los generadores de esta manera:


def primera():
  variable=100
  yield None

g=primera()   # Creamos un generador...
g.next()      # ...y lo ejecutamos

# El generador queda suspendido hasta la próxima llamada.
# Se puede acceder a su clausura

print g.gi_frame.f_locals




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