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.