U ovom uputstvu naučit ćemo kako koristiti atribut __name__ programa Python za njegovo dinamičko pokretanje u različitim kontekstima.
Koja je glavna () funkcija u Pythonu?
Neki programski jezici imaju posebnu funkciju main()
koja se naziva izvršna točka za programsku datoteku. Python interpreter, međutim, pokreće svaki redak serijski od vrha datoteke i nema eksplicitnu main()
funkciju.
Python nudi druge konvencije za definiranje točke izvršenja. Jedan od njih je upotreba main()
funkcije i __name__ svojstva python datoteke.
Što je __name__ u Pythonu?
Varijabla __name__ posebna je ugrađena Python varijabla koja prikazuje ime trenutnog modula.
Ima različite vrijednosti, ovisno o tome gdje izvršavamo Python datoteku. Pogledajmo primjer.
Pokretanje datoteke Python kao skripte
Pretpostavimo da imamo Python datoteku koja se zove helloworld.py sa sljedećim sadržajem:
print(__name__)
Ako iz naredbenog retka pokrenemo helloworld.py , on se izvodi kao Python skripta. Program Python možemo pokrenuti pomoću sljedeće naredbe:
$ python helloworld.py
Kada program pokrenemo kao skriptu, vrijednost varijable __name__ postavlja se na __main__. Tako će izlaz sljedećeg programa biti:
__glavni__
Pokretanje datoteke Python kao modula
Također možemo pokrenuti Python datoteku kao modul. Za to moramo datoteku uvesti u drugi Python program. Pogledajmo primjer.
Pretpostavimo da imamo Python datoteku koja se naziva main.py u istom direktoriju kao i datoteka heloworld.py. Sadrži sljedeći sadržaj:
import helloworld
Kada pokrenemo ovu datoteku, imat ćemo sljedeći izlaz:
Pozdrav svijete
Ovdje možemo vidjeti da uvoz modula također pokreće sav kôd u datoteci modula.
Ali, možemo vidjeti da umjesto prikaza __main__, program prikazuje ime modula tj. Helloworld.
To je zato što je, u kontekstu pokretanja datoteke Python kao modula, ime samog modula dodijeljeno varijabli __name__.
Upotreba ako je uvjetna sa __name__
Sad kad smo shvatili kako se varijabli __name__ dodjeljuju vrijednosti, možemo upotrijebiti if
uvjetnu klauzulu za različito pokretanje iste datoteke Python u različitim kontekstima.
Pogledajmo primjer.
Pretpostavimo da promijenimo sadržaj datoteke helloworld.py u sljedeće:
def main(): print("Hello World") if __name__=="__main__": main()
Sada, kada ga pokrenemo kao skriptu putem naredbenog retka, izlaz će biti:
Pozdrav svijete
Međutim, kada ga pokrenemo kao modul uvozeći ga u datoteku main.py , izlaz se ne prikazuje jer se main()
funkcija ne poziva.
Ovdje smo stvorili prilagođenu main()
funkciju u datoteci helloworld.py . Izvršava se samo kada se program izvodi kao samostalna skripta, a ne kao uvezeni modul.
Ovo je standardni način da se eksplicitno definira main()
funkcija u Pythonu. To je jedan od najpopularnijih slučajeva korištenja varijable __name__ Python datoteke.