blog.furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

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
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury