2016-05-18 32 views
0

Ich habe ein Modul, das aus einer Funktion besteht, die Funktionen verwendet, die von einem anderen Modul importiert wurden. Lass es uns die Hauptfunktion nennen.Globale Variablen zum Submodul

Ich möchte einige Variablen in der Hauptfunktion als globale Variablen und verwenden Sie sie in den Funktionen der importierten Submodule als globale (es gibt bestimmte Sache, die ich nicht als Argumente der Funktion verwenden kann) Kann nicht herausfinden, wie um dies zu tun. Mein Beispiel:

#submodule.py 
def subfunction(): 
    print COLORS 

#mainmodule.py 

from submodule import subfunction 

def main(colors, x, y, z): 
    global COLORS 
    COLORS=colors 
    subfunction() 

Antwort

0

Tun Sie dies nicht. Es gibt etwas, das "Kopplung" genannt wird und als Metrik der Programmierkomplexität verwendet wird. Grundsätzlich gilt, je lockerer die Dinge gekoppelt sind, desto besser, was bedeutet, dass die von einem Code verwendeten Werte explizit an diesen Code übergeben werden sollten. Sie sollten sich daher beispielsweise entlang dieser Linien schreiben:

#submodule.py 
def subfunction(colors): 
    print colors 

#mainmodule.py 
from submodule import subfunction 

def main(colors, x, y, z): 
    global COLORS 
    colors = COLORS 
    subfunction(colors) 

Selbst so die Nutzung von global für Farben in mainmodule den Wert zu setzen ist etwas fragwürdig, da sie die Kupplung strafft. Vermutlich hat es den Zweck, dass andere Funktionen im Modul COLORS verwenden können, ohne den Wert explizit übergeben zu müssen, aber das ist keine besonders gute Idee.

1

Eine Möglichkeit besteht darin, eine Klasse Color zu erstellen und eine statische Variable values zu verwenden.

Datei Color.py:

class Colors: 
    values = [255, 0, 0] 

Datei main.py:

from Color import Colors 

def main(): 
    # Default: 
    print Colors.values 

    # New: 
    Colors.values = [0, 255, 0] 
    print Colors.values 

if __name__ == "__main__": 
    main() 

Ausgang:

[255, 0, 0] 
[0, 255, 0]