Ich muss nur eine einzelne Funktion aus einer anderen Python-Datei importieren, die Zeug darin ausführt, aber wenn ich die Funktion importiere, wird der gesamte Code ausgeführt, anstatt nur die Funktion zu importieren. Gibt es sowieso nur eine einzige Funktion aus einer anderen .py-Datei zu importieren, ohne den gesamten Code auszuführen?Importieren Sie ein Python-Modul, ohne es auszuführen
Antwort
In another.py
, bewegen Sie den Code, den Sie wollen nicht in einen Block lief werden, die nur ausgeführt wird, wenn das Skript explizit importiert zu laufen und nicht nur
def my_func(x):
return x
if __name__ == '__main__':
# Put that needs to run here
Jetzt wird aufgerufen, wenn Sie in your_script.py
sind Sie importieren können, und es läuft nicht
from another import my_func
my_func(...)
Vielen Dank! Das hat funktioniert! –
im anderen python-Skript, das Sie importieren möchten, sollten Sie den gesamten Code setzen, der auf der Ausführung des Skripts in der folgenden ausgeführt werden muss wenn Block -
if '__main__' == __name__:
Erst wenn die Python-Datei als Skript ausgeführt wird, wird die __name__
Variable __main__
sein. Wenn Sie das Skript importieren, wird kein Code innerhalb dieser if-Bedingung ausgeführt.
Sie könnten die fragliche Funktion in eine andere Datei verschieben und in Ihre Datei importieren.
Aber die Tatsache, dass Sie alles beim Import ausführen, lässt mich denken, dass Sie die meisten Sachen in Ihrem importierten Modul in Funktionen verschieben und diese nur bei Bedarf mit einem Hauptwächter aufrufen müssen.
def print_one():
print "one"
def print_two():
print "two"
def what_i_really_want_import():
print "this is what I wanted"
if __name__ == '__main__':
print_one()
print_two()
eher als das, was Sie wahrscheinlich, was ich denke, sieht aus wie
print "one"
print "two"
def what_i_really_want_import():
print "this is what I wanted"
Mit der Hauptwache etwas in einer Funktion wird beim Import nicht ausgeführt werden, auch wenn Sie noch so nennen kann, wenn Sie müssen. Wenn Name == "Haupt" bedeutet wirklich "bin ich dieses Skript von der Befehlszeile ausgeführt?" Bei einem Import gibt die if-Bedingung false zurück, sodass Ihre print_one() -, print_two() -Aufrufe nicht stattfinden.
Es gibt einige gute Gründe, Dinge in einem Skript zu belassen, das beim Import ausgeführt wird. Einige davon sind Konstanten, Initialisierungs-/Konfigurationsschritte, die Sie automatisch durchführen möchten. Und eine Variable auf Modulebene ist eine elegante Möglichkeit, ein Singleton zu erreichen.
def print_one():
print "one"
def print_two():
print "two"
time_when_loaded = time.time()
class MySingleton(object):
pass
THE_ANSWER = 42
singleton = MySingleton()
Aber im Großen und Ganzen lassen Sie nicht zu viel Code auf Last auszuführen, werden Sie sonst mit genau diesen Problemen enden.
1.Open in Editor 2. Suchen Sie die Definition 3. Kopieren Sie fügen die altmodische
Simplest Lösung entfernt manchmal ist das dreckigste.
lololololololol – Dagrooms
- 1. Befehle anzeigen, ohne sie auszuführen
- 2. Importieren Sie ein Python-Modul ohne die Erweiterung .py
- 3. Erhalten Sie ein Python-Funktionsattribut, ohne die Funktion auszuführen
- 4. Versuch, ein Laravel-Projekt zu importieren und auszuführen
- 5. Laden Sie ein Formular, ohne es anzuzeigen
- 6. OSX 10.10 importieren .pfx ohne ein Passwort?
- 7. Importieren Sie ein Modul und verwenden Sie es in julialang
- 8. Ermitteln Sie alle Abhängigkeiten von .sh-Skripts, ohne sie auszuführen
- 9. So kompilieren Sie Tests mit SBT, ohne sie auszuführen
- 10. Überprüfen Sie, ob die JavaScript-Funktion zurückgibt, ohne sie auszuführen?
- 11. So importieren Sie in Typoskript ohne Moduldeklaration
- 12. Ist es möglich, f # -Skripte auszuführen, ohne das Konsolenfenster anzuzeigen?
- 13. Wie UglifyJS2 ohne Node.JS auszuführen
- 14. Ist es möglich, Oracle unter Windows XP ohne Administratorrechte auszuführen?
- 15. Ist es möglich, einen Android-Emulator auszuführen, ohne Eclipse einzurichten?
- 16. Ist es möglich, ein OpenRefine-Skript im Hintergrund auszuführen?
- 17. Starten Sie den IPython-Notebook-Server ohne den Webbrowser auszuführen?
- 18. Wie verfolgt man ein Programm von Anfang an, ohne es als root auszuführen
- 19. Wie kann ich ein Java-Programm in Eclipse kompilieren, ohne es auszuführen?
- 20. Wie ist es möglich, ein Traceroute-ähnliches Programm ohne Root-Rechte auszuführen?
- 21. Ist es möglich, ein Perl-Skript zu verwenden oder zu benötigen, ohne seine Anweisungen auszuführen?
- 22. Durchsuchen Sie eine SQL-Dump-Datei, ohne sie in ein DBMS zu importieren?
- 23. Ist es möglich, dotfuscator über die Befehlszeile auszuführen, ohne die GUI-Anwendung zu öffnen.
- 24. Gibt es in Python eine Möglichkeit, alle Funktionen in einer Datei auszuführen, ohne sie explizit aufzurufen?
- 25. Erstellen und installieren, ohne in Xcode auszuführen
- 26. Kraft CUDA Vorstoß :: reduzieren ohne Parallelität auszuführen
- 27. Importieren Sie ein Modul mit einer Variablen
- 28. Wie importieren Sie optional ein Modul in ein veröffentlichtes Paket?
- 29. Ist es möglich, ein Skript für eine node.js-Abhängigkeit auszuführen?
- 30. Gibt es eine Möglichkeit, ein PHP-Skript von MySQL auszuführen?
@Edd: Wahrscheinlich kein Duplikat; Wenn das Modul, das Sie zu importieren versuchen, Dinge ausführt, die Sie nicht importieren möchten, wird in dieser Frage nicht erläutert, was Sie tun können, um es zu stoppen. – user2357112
@ user2357112 Ah, ja. Ich hatte nicht über das mögliche Fehlen eines "__main__" Checks nachgedacht. Es tut uns leid! – Edd