2012-08-02 8 views
6

Meist kann (Variante a) sehen:Warum ist die Funktion main() nicht innerhalb des if '__main__' definiert?

def main(): 
    do_something() 
    do_sth_else() 

if __name__ == '__main__': 
    main() 

Und ich bin jetzt fragen, warum nicht diese (Variation b):

if __name__ == '__main__': 
    do_something() 
    do_sth_else() 

Oder mindestens diese (c Variation):

if __name__ == '__main__': 
    def main(): 
     do_something() 
     do_sth_else() 

    main() 

Natürlich ruft die Funktion innenaufsind möglicherweise keine Funktionsaufrufe, sie stellen lediglich alles dar, was Sie in Ihrer main()-Funktion ausführen möchten.

Warum also bevorzugen Menschen die Variante a gegenüber den anderen? Ist es nur Stil/Gefühl oder gibt es echte Gründe? Wenn möglich, verlinken Sie bitte auch Quellen.

Antwort

11

Warum beschränken Sie Ihre main() Funktion nur auf die Befehlszeilennutzung?

Durch Definieren einer main()-Funktion im Modulbereich können Sie jetzt das Skript umbrechen und ändern, wie es aufgerufen wird. Vielleicht möchten Sie in sys.argv Standardargumente festlegen, vielleicht möchten Sie den Code in einem anderen Skript wiederverwenden.

4

Dies liegt daran, dass es zwei Möglichkeiten gibt, Python-Skripte zu verwenden. Eine von der Befehlszeile und eine andere beim Importieren von einem anderen Skript. Wenn Sie es über die Befehlszeile ausführen, möchten Sie die Funktion main() ausführen, und wenn Sie es importieren, möchten Sie möglicherweise die Funktion main() nicht ausführen, bis Sie sie benötigen (Sie möchten nur main() importieren).

Verwandte Themen