Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Hermann Riemann Newsgroups: de.comp.lang.python Subject: Re: [Python-de] import Problem Date: Fri, 28 Apr 2017 11:33:07 +0200 Lines: 66 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net Q6KwrZ2FgL6HyY6odg3LdQ3B05jHjrVfcx6I6toaSXNZtl3+NA Cancel-Lock: sha1:kgWl3rB48SXj+Nhyj/Ak8exAFEE= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 In-Reply-To: Xref: csiph.com de.comp.lang.python:4754 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