[Python-es] namespaces y variables globales

Oswaldo Hernández listas en soft-com.es
Mie Nov 3 18:57:14 CET 2010


El 03/11/2010 18:29, jordi torrents escribió:
> Hola Arnau,
>
> 2010/11/3 Arnau Sanchez:
>> Como norma general: variables locales = buenas, globales = malas. Sólo se usan
>> variables globales en casos muy particulares, pero aquí sería sencillamente:
>
> Quizá un poco de contexto a mi problema ayudará, porqué no estoy
> seguro que mi problema sea un caso dónde se aplique la norma general.
>
> Estoy haciendo pruebas de escalabilidad de un càlculo científico
> (implementado en python) en un cluster utilizando la libreria
> parallelpython [1]. Las pruebas tienen como objetivo determinar el
> número de procesadores óptimo para el cálculo. Una vez determinado,
> este número òptimo quedará "hardcodeado" en el código del cálculo y ya
> no será necessario pasarle a la instáncia de la clase Server de
> parallelpython el número de cpus a utilizar via línea de comandos. En
> el desarrollo del cálculo hay múltiples funciones que utilizan la
> instancia de la classe Server de parallelpython. Siguiendo tu consejo,
> tendría que modificar todas éstas funciones añadiendo un argumento que
> sería la instáncia de la clase pp.Server inicializada con el número de
> cpus indicado en la línea de comandos.
>
> Dado que sólo tengo que ejecutar los tests de escalabilidad una vez,
> me gustaría ahorrarme modificar el código del cálculo, por eso pensaba
> que sería una buena idea que la instáncia de pp.Server fuera accesible
> desde el namespace global a todas las funciones que utilizan
> paralelización. Cuando no tengo que pasar el número de cpus a la
> instáncia de la clase Server via línea de comandos, consigo que esté
> en el namespace global del programa simplemente instanciando la clase
> fuera de la función main al principio del script.
>

Has probado a insertar la variable directamente en el diccionario globals?:

if not options.number:
     globals()["a"] = 1
else:
     globals()["a"] = options.number



-- 
Oswaldo Hernández


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