W tym samouczku nauczymy się, jak używać atrybutu __name__ programu w języku Python, aby uruchamiać go dynamicznie w różnych kontekstach.
Jaka jest funkcja main () w Pythonie?
Niektóre języki programowania mają specjalną funkcję o nazwie, main()
która jest punktem wykonania pliku programu. Jednak interpreter języka Python uruchamia każdą linię szeregowo od początku pliku i nie ma żadnej jawnej main()
funkcji.
Python oferuje inne konwencje definiowania punktu wykonania. Jednym z nich jest użycie main()
funkcji i właściwości __name__ pliku Pythona.
Co to jest __name__ w Pythonie?
Zmienna __name__ to specjalna wbudowana zmienna Pythona, która pokazuje nazwę bieżącego modułu.
Ma różne wartości w zależności od tego, gdzie wykonujemy plik Pythona. Spójrzmy na przykład.
Uruchamianie pliku Python jako skryptu
Załóżmy, że mamy plik Pythona o nazwie helloworld.py z następującą zawartością:
print(__name__)
Jeśli uruchomimy helloworld.py z wiersza poleceń, to działa on jako skrypt Pythona. Możemy uruchomić program w Pythonie za pomocą następującego polecenia:
$ python helloworld.py
Kiedy uruchamiamy program jako skrypt, wartość zmiennej __name__ jest ustawiana na __main__. Zatem wynik następującego programu będzie:
__Główny__
Uruchamianie pliku Pythona jako modułu
Możemy również uruchomić plik Pythona jako moduł. W tym celu musimy zaimportować ten plik do innego programu w Pythonie. Spójrzmy na przykład.
Załóżmy, że mamy plik Pythona o nazwie main.py w tym samym katalogu, co plik heloworld.py. Ma następującą zawartość:
import helloworld
Kiedy uruchomimy ten plik, otrzymamy następujący wynik:
Witaj świecie
Tutaj widzimy, że importowanie modułu uruchamia również cały kod w pliku modułu.
Ale widzimy, że zamiast wyświetlać __main__, program wyświetla nazwę modułu, czyli helloworld.
Dzieje się tak, ponieważ w kontekście uruchamiania pliku Pythona jako modułu, nazwa samego modułu jest przypisywana do zmiennej __name__.
Używanie warunku warunkowego warunkowego z __name__
Teraz, gdy zrozumieliśmy, w jaki sposób zmiennej __name__ przypisywane są wartości, możemy użyć if
klauzuli warunkowej, aby uruchomić ten sam plik Pythona w różny sposób w różnych kontekstach.
Spójrzmy na przykład.
Załóżmy, że zmienimy zawartość pliku helloworld.py na następującą:
def main(): print("Hello World") if __name__=="__main__": main()
Teraz, gdy uruchomimy go jako skrypt za pomocą wiersza poleceń, wynik będzie wyglądał następująco:
Witaj świecie
Jednak gdy uruchamiamy go jako moduł, importując go do pliku main.py , nie są wyświetlane żadne dane wyjściowe, ponieważ main()
funkcja nie jest wywoływana.
Tutaj utworzyliśmy niestandardową main()
funkcję w pliku helloworld.py . Jest wykonywany tylko wtedy, gdy program jest uruchamiany jako samodzielny skrypt, a nie jako zaimportowany moduł.
Jest to standardowy sposób jawnego definiowania main()
funkcji w Pythonie. Jest to jeden z najpopularniejszych przypadków użycia zmiennej __name__ pliku Pythona.