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.
Hallö'chen. Kurz um: ich arbeite gerade mit Packages und Modulen. Dabei stieß ich auf das Verhalten, dass beim import eines Moduls und dem aufruf der Funktion die Funktion doppelt ausgeführt wird. Wieso und weshalb? Ich rufe die Funktion ja nur 1x auf und nicht 2x
Und noch ne Frage: sollte nicht die Main Methode dabei automatisch aufgerufen werden? Hier tut's sies nicht
Das Skript, das du an den Python Interpreter uebergibst, bekommt einen speziellen Namen - __main__. Auf den pruefst du ja auch, und da das ein Import ist, wird die Klausel nicht ausgefuehrt.
Das say_something mehrfach ausgefuehrt wird kann nur daran liegen, das du das unter vierschiedenen Namen mehrfach importierst.
@crazyyzarc: Ich weiss das ist nur ein Beispiel, aber eine Funktionsobjekt dessen qualifizierter Name `Projekte.Package.print_out.say_sth.say_something()` ist — so was sollte man nicht mal im Spass machen.
Wenn man die Namen ein bisschen ernster nimmt, dann sollte `Projekte` da nicht drin sein wenn das tatsächlich ein Ordner mit Projekten ist.
Wie führst Du das eigentlich aus? Korrekt wäre ``python3 -m Projekte.Package.print_out.say_sth`` und dabei sollte das aktuelle Arbeitsverzeichnis sich auf keinen Fall irgendwo innerhalb der Verzeichnisstruktur mit den Packages/Modulen befinden. Sonst → Chaos.
Die Aussage in dem `print()` im ``if __name__ …``-Guard ist falsch. Wenn diese Ausgaben gemacht wird, wurde das Modul ja gerade *nicht* importiert, sondern als Programm ausgeführt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Was rufst Du denn hier auf? Du hast eine __init__.py und ein Untermodul say_sth.py und beides sind ja keine Scripte.
Also wie sieht das Skript aus?
Auch __init__.py sollte keine Seiteneffekte haben.
__deets__ hat geschrieben: Donnerstag 18. Juni 2020, 11:05
Das Skript, das du an den Python Interpreter uebergibst, bekommt einen speziellen Namen - __main__. Auf den pruefst du ja auch, und da das ein Import ist, wird die Klausel nicht ausgefuehrt.
Das say_something mehrfach ausgefuehrt wird kann nur daran liegen, das du das unter vierschiedenen Namen mehrfach importierst.
Okay danke
__deets__ hat geschrieben: Donnerstag 18. Juni 2020, 11:05
`Projekte.Package.print_out.say_sth.say_something()` ist — so was sollte man nicht mal im Spass machen.
Ich muss anmerken, dass ich PyCharm im Oberordner "Python" mit den Unterordner "Basic" und eben auch "Projekte" geöffnet habe und dementsprechend Dateien selektiere
Je nach Ort des Startfensters, variiert ja auch der relative Pfad zum Modul
Wie machst du denn das?
@crazyyzarc: Module startet man wie gezeigt mit der ``-m`` Option über den voll qualifizierten Namen und das aktuelle Arbeitsverzeichnis befindet sich nie innerhalb von irgendwelchen Packages, weil das wie schon gesagt zu Chaos führt.
Ohne ``-m``, also über den Dateinamen, startet man nur Programme. Programme liegen nicht in Packages sondern sind eigenständig. Auch hier gilt aber: das aktuelle Arbeitsverzeichnis darf nicht innerhalb eines Packages sein.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari