Presentacion (Era Definir Listas Globales)

Antonio Castro acastro en ciberdroide.com
Mie Mar 10 08:33:51 CET 2004


Aprovecho para presentarme. Soy nuevo en la lista y empecé con
python hace cosa de un més. Me ha encantado. Los lenguajes que
más he usado son el C y el shell-script. He probado a lo largo
de mi larga experiencia profesional una gran cantidad de lenguajes
C++, Java, Perl,.. y no están mal pero tampoco me entusiasmaban.
Por el contrario, me parece que python es una maravilla de lenguaje
no solo por su potencia, sino por su legibilidad y dinamismo. Quizás
la pega es que hay muchas librerías más o menos equivalentes y los
esfuerzos por documentar todo eso se ven perjudicados. Sin buena
documentación cuesta mucho dar los primeros pasos. Estoy ahora
enfrascado con Tkinter, y con Tix. Acudo a http://www.python.org y a
http://pyspanishdoc.sourceforge.net. Busco bibliografía y documentación.

> 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.

Yo tuve un problema de diseño recientemente en el cual la solución
parecía pasar por usar variables globales entre determinadas funciones
y se me ocurrió meter una clase con sus métodos dentro de una función.

def funcionPrincipal(...):
	class ClaseInterna:
		__init__(self, ...):
			self.var1=...
			self.var2=...
			.......
			self.funci1(...)
			.......
			self.funci2(...)
			.......

		def funci1(self, ...):
			.......
			...self.var1....
			...self.var2....

		def funci2(self, ...):
			.......
			...self.var2....
			.......
			.......
			...self.var1....

	# Lo único que hace funcionPrincipal() es instanciar una
	# clase que es la que asume toda la funcionalidad
	instclas=ClaseInterna(....)

Por una parte self.var1, self.var1 serán compartidas por varias
funciones pero no son globales al resto de la aplicación.

La idea era que funcionPrincipal() era demasiado grande para hacerlo
en una única funcion y parecía necesario la cooperacion de varias
funciones que pompartieran variables globales.

No me interesaba convertir funcionPrincipal() en una clase porque
todo lo que hay dentro, puede y debe ser ignorado.

Llevo poco tiempo usando python y no se si esta solución resulta
elegante o no. Más bien me parece una solución algo rarita y por eso
les consulto.

Perdón por el tamaño del mensaje.


-- 
Un saludo
Antonio Castro

       /\     /\
         \\W//
        _|0 0|_
+-oOOO-(___o___)-OOOo---------------------+
| . . . . U U . Antonio Castro Snurmacher |
| . . . . . . . acastro en ciberdroide.com   |
+()()()---------()()()--------------------+




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