Dies ist die größte Newbie Frage auf dem Planeten, aber ich bin mir einfach nicht sicher. Ich habe eine Reihe von Funktionen geschrieben, die einige Aufgaben ausführen, und ich möchte eine "Haupt" -Funktion, die zum Beispiel, wenn ich "someProgram.py" aufrufen, function1, function2 und quit ausführen. Ich erinnere mich vage an etwas über "Haupt", aber ich habe keine Ahnung.Nachdem ich ein Python-Programm in Funktionen zerlegt habe, wie mache ich eine der Hauptfunktionen?
Nachdem ich ein Python-Programm in Funktionen zerlegt habe, wie mache ich eine der Hauptfunktionen?
Antwort
Python-Skripte ist nicht Sammlung von Funktionen, sondern Sammlungen von Aussagen - Funktion und Klassendefinitionen sind nur Aussagen, die Namen binden funktionieren oder Klasse Objekte.
Wenn Sie eine Druckanweisung oben oder in der Mitte Ihres Programms ablegen, wird sie normal ausgeführt, ohne dass sie in irgendeiner Funktion ist. Das bedeutet, dass Sie einfach den Hauptcode am Ende der Datei ablegen können und dieser wird ausgeführt, wenn das Skript ausgeführt wird. Wenn Ihr Skript jedoch importiert wird und nicht direkt ausgeführt wird, wird dieser Code ebenfalls ausgeführt. Dies ist normalerweise nicht das, was Sie wollen, also würden Sie das vermeiden wollen.
Python stellt die globale Variable __name__
zur Verfügung, um zu unterscheiden, wenn ein Skript importiert und direkt ausgeführt wird - es wird auf den Namen festgelegt, unter dem das Skript ausgeführt wird. Wenn das Skript importiert wird, ist dies der Name der Skriptdatei. Wenn es direkt ausgeführt wird, wird es "__main__"
sein. Sie können also if __name__ == '__main__':
an den unteren Rand Ihres Programms setzen, und alles innerhalb dieses if-Blocks wird nur ausgeführt, wenn das Skript direkt ausgeführt wird.
Beispiel.
Fühlte den Drang, zu dieser ausgezeichneten Antwort hinzuzufügen. –
+1. '__name__' ist eigentlich der Name des" aktuellen "Moduls, das (nicht zufällig, ich bin mir sicher) bequem für' __main__' funktioniert (was speziell ist, aber immer noch ein Modul). Dies ist praktisch kombiniert mit Protokollierung oder http://stackoverflow.com/questions/2000861/retrieve-module-object-from-stack-frame/2011168#2011168 –
if __name__ == '__main__':
run_main()
Dies beantwortet nicht wirklich die Frage wie geschrieben, es beantwortet "Wie bekomme ich meine Hauptfunktion, nicht zu laufen, wenn mein Modul importiert wird?". Wenn Sie bereits eine 'run_main'-Funktion haben, müssen Sie sie nur aufrufen. Die Antwort von Max S ist mir vorzuziehen. –
Wenn ein Python-Modul zum ersten Mal importiert wird, wird der Hauptblock ausgeführt. Sie können sich zwischen Sein laufen unterscheiden und in ein anderes Programm importiert werden:
if __name__ == "__main__":
function1()
function2()
else:
# loaded from another module
Während ich Ihre Frage lese, fragen Sie, wie man eine Hauptfunktion definiert. Das wäre eigentlich mit so etwas wie geschehen:
def main():
function1()
function2()
return 0
Und dann würden Sie Code so etwas wie dies außerhalb all Ihre Hauptdatei Funktionen setzen:
if __name__ == "__main__":
sys.exit(main())
(Natürlich müssen Sie ein import sys irgendwo für die oben zur Arbeit.)
A (jetzt irgendwie alt, aber immer noch relevant) post from Guido erzählt mehr.
'return 0'? Das ist Python, nicht C :). –
Was ist das Problem? Es verursacht keinen Fehler und teilt dem Betriebssystem mit, dass Sie ohne Fehler beendet haben, daher wird es in mindestens einigen Kreisen als gute Übung angesehen. – GreenMatt
Entschuldigung, du hast Recht. Ich habe es nicht im Zusammenhang mit dem 'sys.exit' gelesen. –
- 1. Wie mache ich Metaklassenänderungen rückgängig, nachdem ich GroovyShell ausgeführt habe?
- 2. Wie mache ich das Aktualisierungstoken für Google ungültig, nachdem ich das Google-Passwort geändert habe?
- 3. Wie erhalte ich die URL der Antwort-Seite, nachdem ich ein Formular in mechanize eingereicht habe?
- 4. Wie mache ich eine Rohrschleife in Zsh?
- 5. Wie starte ich meine Spielschleife, nachdem ich auf der Begrüßungsseite auf eine Schaltfläche geklickt habe?
- 6. Wie mache ich Funktionen mit Flagparametern? (C++)
- 7. Wie kann ich ein Layout aufrufen, nachdem ich auf eine Schaltfläche geklickt habe?
- 8. Return() von Funktionen - mache ich es falsch?
- 9. Wie mache ich Netbeans glauben, dass ich JMS habe?
- 10. Wie mache ich ein DLOOKUP
- 11. Wie mache ich eine Navbar in PHP
- 12. Wie füge ich Text in ein Textfeld ein, nachdem ich ein weiteres Fenster geöffnet habe, um Informationen anzufordern?
- 13. Wie kann ich ein Dropdown-Menü erstellen, nachdem ich auf ein Bild geklickt habe? [bootstrap/eckig]
- 14. Zwei Hauptfunktionen
- 15. Wie gebe ich die Anzahl der gefundenen Artikel zurück, nachdem ich eine Suche durchgeführt habe?
- 16. Wie füge ich Daten aus der Struktur in die externe Tabelle ein, nachdem ich eine Operation ausgeführt habe?
- 17. Wie kann ich Header, Klassen und Hauptfunktionen in C++ trennen?
- 18. Wie führe ich ein Segment aus, nachdem ich irgendwo in einen Bereich von TableView geklickt habe?
- 19. Wie mache ich eine Update-Anweisung, die ich an eine Datenbank gemacht habe
- 20. Wie mache ich ein Fragment?
- 21. Ich habe ein Array und ich habe sie in der Tabelle, muss ich Hintergrundfarbe der Tabelle
- 22. Wie mache ich ein Privateigentum?
- 23. Wie mache ich ein NotEqual in NHibernate
- 24. Seite friert ein, nachdem ich auf einen Linkbutton geklickt habe
- 25. Wie kann ich eine UIView neu erstellen, nachdem ich sie veröffentlicht habe?
- 26. Wie lege ich eine Ansicht als First Responder fest, nachdem ich eine Tableview-Zelle berührt habe?
- 27. Wie mache ich ein "^" Zeichen in MATLAB?
- 28. Wie mache ich ein Quadrat in C++
- 29. Wie mache ich eine Knopfanimation?
- 30. iconv(): Ich habe ein unvollständiges Multibyte-Zeichen in der Eingabezeichenfolge
+1 Es ist eine tolle Neuling Frage! –