una paquetes modulos librerias libreria instalar incluidas hacer funciones externas crear creacion como comando biblioteca python module global-variables

paquetes - librerias incluidas en python



¿Cómo programar programáticamente una variable global(módulo)? (3)

Aquí hay una mejor manera de hacerlo:

import sys definitions = {''a'': 1, ''b'': 2, ''c'': 123.4} module = sys.modules[__name__] for name, value in definitions.iteritems(): setattr(module, name, value)

Me gustaría definir globales de una manera "programática". Algo similar a lo que quiero hacer sería:

definitions = {''a'': 1, ''b'': 2, ''c'': 123.4} for definition in definitions.items(): exec("%s = %r" % definition) # a = 1, etc.

Específicamente, quiero crear un módulo fundamentalconstants que contenga variables a las que se pueda acceder como constantes fundamentalconstants.electron_mass , etc., donde todos los valores se obtienen al analizar un archivo (de ahí la necesidad de realizar las asignaciones de forma "programática").

Ahora, la solución exec anterior funcionaría. Pero estoy un poco incómodo con eso, porque me temo que el exec no es la forma más limpia de lograr el objetivo de establecer módulos globales.


Puede establecer globales en el diccionario devuelto por globals ():

definitions = {''a'': 1, ''b'': 2, ''c'': 123.4} for name, value in definitions.items(): globals()[name] = value


Tiene razón, el exec generalmente es una mala idea y ciertamente no es necesario en este caso.

La respuesta de Ned está bien. Otra forma posible de hacerlo si usted es un módulo es importar usted mismo:

fundamentalconstants.py:

import fundamentalconstants fundamentalconstants.life_meaning= 42 for line in open(''constants.dat''): name, _, value= line.partition('':'') setattr(fundamentalconstants, name, value)