Ganzes Skript wird beim Import einer Funktion ausgeführt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Hallo

Ich habe die Import-Funktion eigentlich schon öfters benutzt, nur jetzt erst habe ich ein merkwürdiges Verhalten festgetellt, wo ich mir nciht sicher bin ob das Normal ist oder sich aus einer Kombination von Umständen ergeben hat.

Ich habe ein Script1, wo am Anfang ein paar Dinge mit dem Print Befehl ausgegeben werden und dannach eine Funktion1 definiert wird. Nun wollte ich diese Funktion1 in einem anderen Skript2 nutzen und diese importieren. Importiere ich besagte Funktion1 jetzt jedoch mit "from script1 import funktion1" wird beim ausführen von Script2 das komplette Script1 ausgeführt, nicht nur die Funktion importiert. Merkwürdig?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Nein, ganz normales Verhalten. Beim ersten Importieren eines Moduls wird der Code auf modulebene ausgeführt. Wenn dort Ausgaben gemacht werden, dann werden diese eben auch ausgeführt. Deshalb schreibt man auch keinen Code (abgesehen von Imports und Definitionen von Klassen, Funktionen und Konstanten) auf Modulebene. Für dein "Problem" gibt es in Python eine ganz einfache Lösung:

Code: Alles auswählen

def main():
    ...

if __name__ == "__main__":
    main()
In die main-Funktion schreibst du nun alles rein was passieren soll, wenn du das Modul direkt startest. Das if sorgt dann dafür, dass der Code in main auch nur dann ausgeführt wird und nicht mehr bei Importen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Ok, Danke. Dann muss ich wohl doch einiges mal überarbeiten :D
Antworten