Użycie __name__ w Pythonie
Plik ze skryptem jest traktowany przez interpreter Pythona jako obiekt i podczas wczytania uruchamiania lub importowania przez inny skryptuje jako obiekt i automatycznie zostaje mu nadana właściwość name, której zostaje przypisana nazwa pliku (bez rozszerzenia) jeśli został on zaimportowany lub wartość "main" jeśli został uruchomiony bezpośrednio.
Przykładowy skrypt modulik.py
#!/usr/bin/python
# modulik.py
print __name__
uruchomiony bezpośrednio
> python modulik.py
da wynik
__main__
Ten sam skrypt zaimportowany przez przykładowy skrypt loader.py
n
#!/usr/bin/python
# loader.py
import modulik
i uruchomiony
> python loader.py
da wynik
modulik
Jeśli zmienimy loader.py na
#!/usr/bin/python
# loader.py
import modulik
print __name__
to otrzymamy
modulik
__main__
Pozwala to np. umieszczać w skrypcie kod, który zostaje wykonany tylko gdy skrypt zostaje uruchomiony bezpośrednio.
Dzięki temu skrypt może być wykorzystywany jako samodzielny program (np. do prostych zadań, które pobierają dane jako argumenty podane przy uruchomieniu a wyniki wypisują na ekran) lub jako biblioteka funkcji wykorzystywanych przez bardziej rozbudowany skrypt, który np. dane pobiera z pliku lub bazy danych i tam też zapisuje wyniki.
Przykład
#!/usr/bin/python
# modulik.py
def kwadrat(x):
return x*x
if __name__ == '__main__':
import sys
for i in sys.argv[1:]:
print i, kwadrat(int(i))
::::python
#!/usr/bin/python
# loader.py
import modulik
liczby = [3, 5, 7, 9, 11, 13]
for i in liczby:
print i, modulik.kwadrat(i)
i można uruchamiać
> python loader.py
lub
> python modulik.py 2 4 6 8 10