2015-07-20 10 views
7

Muss/sollte ein Python-Skript eine main() Funktion haben? Zum Beispiel ist es okMuss Python-Skript eine Funktion als Haupt definieren?

if __name__ == '__main__': 
    main() 

mit

if __name__ == '__main__': 
    entryPoint() 

(oder einem anderen aussagekräftigen Namen)

+1

Ja. Dieses bisschen Magie verhindert nur, dass Ihre Hauptfunktion ausgeführt wird, wenn Ihr Skript importiert wird. Dies sagt nur "Wenn ich das Hauptskript bin, rufe diese Funktion auf". –

+0

@MorganThrapp: Beantwortest du die Frage im Titel oder im Körper? Weil sie widersprüchlich sind. ;) –

+0

Hoppla, habe das gar nicht bemerkt. Ich beantwortete die Frage, ob es okay ist, 'main()' umzubenennen. –

Antwort

10

zu ersetzen, um eine Funktion Mit dem Namen main() ist nur eine Konvention. Sie können ihm einen beliebigen Namen geben.

Prüfung auf den Modulnamen ist nur ein netter Trick Code zum Laufen zu verhindern, wenn der Code als __main__ Modul nicht ausgeführt wird (das heißt nicht, wenn als das Skript importiert Python begann mit, sondern als Modul importiert). Sie können jeden beliebigen Code unter diesem if Test ausführen.

Die Verwendung einer Funktion in diesem Fall hilft, den globalen Namespace Ihres Moduls nicht durch Ranging-Namen in einen lokalen Namespace zu überführen. Die Benennung dieser Funktion main() ist üblich, aber keine Voraussetzung.

+0

Eigentlich ist es ein Trick, _make_ den Code auszuführen (nicht zu verhindern), wenn das Skript als '__main__' Modul ausgeführt wird. – martineau

+2

@martineau: Nein, der gesamte Code auf globaler Ebene wird ausgeführt, wenn ein Modul importiert wird (sei es direkt als Skript oder weil es indirekt importiert wurde). Der Test 'if __name__' deaktiviert dann * den Code, wenn Sie ihn nicht direkt als Skript ausführen. Ich sehe, dass mein Text die beiden durcheinander gebracht hat. –

7

Nein, ein Python-Skript muss keine main()-Funktion haben. Es folgt nur Konventionen, weil die Funktion, die Sie unter der if __name__ == '__main__':-Anweisung setzen, die Funktion ist, die wirklich die ganze Arbeit für Ihr Skript erledigt, also ist es die Hauptfunktion. Wenn es tatsächlich einen Funktionsnamen gibt, der das Programm leichter lesbar und übersichtlicher macht, können Sie stattdessen diesen Funktionsnamen verwenden.

In der Tat brauchen Sie nicht einmal brauchen der if __name__ == '__main__': Teil, aber es ist eine gute Praxis, nicht nur eine Konvention. Es verhindert nur die Funktion main() oder was auch immer Sie es nennen möchten, wenn Sie die Datei als Modul importieren. Wenn Sie das Skript nicht importieren, brauchen Sie wahrscheinlich nicht, aber es ist immer noch eine gute Praxis. Für mehr darüber und warum es tut, was es tut, siehe What does if __name__ == "__main__": do?