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)