Czy podczas importowania modułów Python’owych zastanawiałeś się w jakim celu wykorzystywane jest sprawdzenie:
if __name__ == '__main__':
Jeśli tak to zapraszam do krótkiego artykułu, w którym omówię tą specjalną zmienną.
Podczas uruchamiania skryptu Python’owego inicjalizowane są specjalne zmienne. Jedną z nich jest __name__, która przechowuje nazwę modułu. Nazwa modułu może się różnić od sposobu uruchomienia skryptu. W momencie uruchomienia bezpośrednio skryptu (nie z importu), moduł przyjmuje nazwę __main__. Można to sprawdzić w łatwy sposób:
print('First module name is {}'.format(__name__)) First module name is __main__
Teraz dodajmy sobie nowy pusty plik, w którym zaimportujemy pierwszy moduł i wywołamy w nim tą samą funkcję:
import Training print('Second module name is {}'.format(__name__)) First module name is Training Second module name is __main__
Jak widzicie zmienna __name__ pierwszego modułu przyjęła nazwę pliku (zawsze przyjmuje nazwę pliku bez ścieżki). Natomiast drugi moduł jako, iż był uruchamiany otrzymał nazwę __main__.
Napiszmy kod, który jeszcze lepiej nam to zobrazuje. W pierwszym module napiszmy:
print('Ten tekst o najlepszym blogu CodeCouple.pl wyświetli się zawsze') if __name__ == '__main__': print('Uruchamiamy bezpośrednio') else: print('Uruchamiamy z importu')
Natomiast w drugim pliku:
import Training print('Second module name is {}'.format(__name__))
W przypadku uruchomienia bezpośrednio modułu pierwszego otrzymamy wynik:
Ten tekst o najlepszym blogu CodeCouple.pl wyświetli się zawsze Uruchamiamy bezpośrednio
Natomiast gdy uruchomimy drugi moduł, który importuje pierwszy moduł otrzymamy:
Ten tekst o najlepszym blogu CodeCouple.pl wyświetli się zawsze Uruchamiamy z importu Second module name is __main__
Sprawdzenie czy __name__ jest równe __main__ ma na celu sprawdzenie czy plik jest uruchamiany bezpośrednio, czy poprzez import. Do czego przyda nam się ta wiedza? Otóż najczęściej wykorzystywana jest do pisania/wywoływania testów. Ponieważ najczęściej importujemy jakieś moduł, wtedy takie sprawdzenie eliminuje nam odpalenie tych testów. Natomiast dla nas jako autorów jest to dobre miejsce, aby uruchomić testy.