python class - Wie programmiere ich eine globale(Modul-)Variable?



import from (4)

Ich möchte Globals "programmatisch" definieren. Etwas ähnlich zu dem, was ich tun möchte, wäre:

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

Insbesondere möchte ich ein Modul fundamentalconstants erstellen, das Variablen enthält, auf die als fundamentalconstants.electron_mass Konstanten zugegriffen werden kann. fundamentalconstants.electron_mass , usw., wobei alle Werte durch Parsing einer Datei erhalten werden (daher die Notwendigkeit, die Zuweisungen auf "programmatische" Weise durchzuführen).

Jetzt würde die obige exec Lösung funktionieren. Aber ich bin ein bisschen unruhig, weil ich Angst habe, dass exec nicht der sauberste Weg ist, um das Ziel zu erreichen, Module Globals zu setzen.


Answers

Sie können in dem von globals () zurückgegebenen Dictionary globals setzen:

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

Du hast Recht, exec ist in der Regel eine schlechte Idee und ist in diesem Fall sicherlich nicht erforderlich.

Neds Antwort ist in Ordnung. Eine andere Möglichkeit, es zu tun, wenn Sie ein Modul sind, besteht darin, sich selbst zu importieren:

fundamentalconstants.py:

import fundamentalconstants

fundamentalconstants.life_meaning= 42

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

Hier ist ein besserer Weg, es zu tun:

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

Aus der Schale

ls site-packages

Wenn das nicht hilfreich ist, können Sie dies tun.

import sys
import os
for p in sys.path:
    print os.listdir( p )

Und sehen Sie, was das produziert.





python module global-variables