Wszyscy inni już odpowiedzieli, ale myślę, że nadal mam coś jeszcze do dodania.
Przyczyny mieć że if
oświadczenie wzywające main()
(w przypadkowej kolejności):
inne języki (takie jak C i Java) mają main()
funkcji, która jest wywoływana, gdy program jest wykonywany. Korzystając z tego if
, możemy sprawić, aby Python zachowywał się tak jak oni, który jest bardziej znany dla wielu osób.
Kod będzie czystszy, łatwiejszy do odczytania i lepiej zorganizowany. (tak, wiem, że to jest subiektywne)
To będzie możliwe do import
, że kod Pythona jako moduł bez nieprzyjemnych skutków ubocznych.
Oznacza to, że będzie można przeprowadzić testy na tym kodzie.
Oznacza to, że możemy zaimportować ten kod do interaktywnej powłoki Pythona i przetestować/debugować/uruchomić.
Zmienne wewnątrz def main
są lokalnej, natomiast poza nim są globalnego. Może to wprowadzić kilka błędów i nieoczekiwanych zachowań.
Ale jesteś nie wymaga napisać main()
funkcję i wywołać ją wewnątrz instrukcji if
.
Ja zwykle zaczynam pisać małe skrypty jednorazowe bez żadnej funkcji. Jeśli skrypt będzie wystarczająco duży, lub jeśli poczuję, że umieszczenie całego kodu wewnątrz funkcji przyniesie mi korzyść, wówczas zmienię kod i zrobię to. Dzieje się tak również, gdy piszę skrypty bash
.
Nawet jeśli umieścisz kod w głównej funkcji, nie musisz pisać tego dokładnie. Zgrabny zmienność może być:
import sys
def main(argv):
# My code here
pass
if __name__ == "__main__":
main(sys.argv)
Oznacza to, że można zadzwonić main()
z innych skryptów (lub interaktywnej powłoki) uboczny parametrów niestandardowych. Może to być przydatne w testach jednostkowych lub podczas przetwarzania wsadowego. Ale pamiętaj, że powyższy kod będzie wymagał parsowania argv, więc może lepiej będzie użyć innego wywołania, które przekazuje parametry już przeanalizowane.
W aplikacji obiektowej Pisałem kod wyglądał tak:
class MyApplication(something):
# My code here
if __name__ == "__main__":
app = MyApplication()
app.run()
Tak, nie krępuj się napisać kod, który lepiej pasuje do ciebie. :)
Zobacz http://stackoverflow.com/questions/419163/what-does-if-name-main-do – gimel
stackoverflow.com/questions/419163/what-does-if-name-main-do does nie odpowiadam na całe pytanie. – Johnsyweb
Czego rzekomy duplikat nie odpowiada: posiadanie funkcji main() (zamiast zapisywania całego kodu w bloku "if __name__") jest przydatne, ponieważ pozwala uniknąć przypadkowego utworzenia zmiennych globalnych, które mogłyby wpłynąć na inne funkcje. – slowdog