Am 28.04.2017 um 09:44 schrieb Peter Otten:
der nicht gerne extra Variable umkopieren mag Genau das tust du aber mit
from p4 import *
und wie Christopher bereits gesagt hat, macht "global" einen Namen global im Modul, nicht im Programm.
Um eine Funktion auszulagern und dabei zirkuläre Imports zu vermeiden übergibst du am besten den "state" explizit:
# zeugs.py from ausgelagert import f
Da es sich in der Anwendungen um viele Funktionen handelt, ist * statt f angesagt. Bis dahin also nichts Neues.
x = f(0) # ausgelagert.py def f(x): return x + 42
Im konkreten Fall handelt es sich um viele Modul übergreifende Variable, die ich nicht dauernd in Argumentlisten übergeben mag. Das ganze könnte eher nach folgenden Schema ablaufen: Kommando for i in *.py;do echo "##########" $i;cat $i;done liefert ########## globale_funktionen.py import globale_variable g=globale_variable.variablen def f(): global g g.x=1 ########## globale_variable.py class Globale_Variablen: def __init__(self): self.x=0 variablen=Globale_Variablen() ########## initialisiere.py from globale_funktionen import * f() ########## test.py import globale_variable g=globale_variable.variablen import initialisiere print(g.x) python3 test.py liefert wie gewünscht dann 1 Hermann der leider in test.py nicht noch zusätzlich import globale_funktionen as g absetzen darf, um die Namenszahl zu verringern. -- http://www.hermann-riemann.de
Hermann Riemann wrote:
########## globale_funktionen.py import globale_variable g=globale_variable.variablen def f(): global g g.x=1
Das "global"-Statement ist überflüssig, da du den Namen g nur liest.
########## globale_variable.py class Globale_Variablen: def __init__(self): self.x=0 variablen=Globale_Variablen()
Wenn du sowieso mit Klassen hantierst, mach aus f() doch eine Methode.
participants (2)
-
Hermann Riemann
-
Peter Otten