Naziv Python skripte ili modula koji se trenutno izvršava pohranjen je u Pythonovoj posebnoj varijabli __name__. Python 3.0 uveo je varijablu __name__, koje nema u Pythonu 2. x. Trenutna Python skripta ili vrijednost modula, __main__, dodijeljena je varijabli __name__ dok se izvodi.
Što znači _ime_?
Python ima ugrađenu varijablu __name__ koja pohranjuje naziv skripte ili modula koji se trenutno izvršava. Naziv skripte ili modula pohranjuje se u varijabli __name__ osim ako je trenutni modul pokrenut, u kojem slučaju mu se dodjeljuje vrijednost __main__.
Posljedično, kada se Python skripta izvršava, vrijednost njene varijable __name__ uvijek bi trebala biti __main__ ako se uvozi u drugu Python skriptu. Ako nije, pojavit će se naziv modula.
Primjer :
Da bismo to bolje razumjeli, poslužimo se primjerom. Napraviti skripta u Pythonu pod nazivom testing.py, i dodajte mu sljedeći kod:
# Code to define a function def anything(): print('Value of the __name__ : ', __name__) anything()
Izlaz:
Value of the __name__ : __main__
Obrazloženje:
Skripta se odmah pokreće kao glavni program, kao što je naznačeno izlazom 'Vrijednost naziva: main'. U Pythonu, vrijednost varijable __name__ skripte automatski se postavlja na '__main__' kada se skripta izravno izvršava. Ovaj izlaz potvrđuje da se skripta izvodi izravno, a ne da se uvozi kao modul u drugu skriptu
Izgradimo sada drugu Python skriptu pod nazivom glavni.py i u njega uvesti prethodni.
Primjer :
# importing testing.py import testing testing.anything()
Izlaz:
Value of the __name__ : testing
Obrazloženje:
testiranje. anything() je metoda koja se pokreće kada se skripta testing.py uveze u drugu Python skriptu pomoću testiranja uvoza. U ovoj situaciji, naziv modula, u ovom slučaju 'testing', postavljen je kao vrijednost varijable __name__ u testing.py umjesto kao '__main__.' Iz tog razloga, izlaz testiranja. anything() je 'Vrijednost __name__: testiranje.' Ovo ilustrira kako izravno pokretanje skripte u odnosu na njen uvoz kao modula utječe na vrijednost varijable __name__.
Korištenje uvjeta if name == main :
Koristimo se izjava if i stanje __ime__ == __glavni__ to proglasiti određeni Python kod treba samo biti izvodi se kada se skripta izvodi izravno .
Primjer :
# importing testing.py import testing if __name__ == __main__: testing.anything()
U ovom slučaju, sposobnost trenutnog modula ili skripte za neovisno pokretanje utvrđuje se korištenjem niza __main__. Kako bi Python tumaču ukazali da je ključna riječ u varijabli __name__ rezervirana ili posebna, postoje dvije podvlake s obje strane izraza.
Primjer koda za ime u Pythonu:
Kao što je prije rečeno, kada pokrenemo datoteku koda, kod se izvodi izravno - čak se i ne uvozi u drugu datoteku - i kao rezultat toga, vrijednost varijable __name__ mijenja se u __main__.
# defining a function def anything(): print('It is a function in the ScriptP1.') if __name__=='__main__': anything() print('Called from the ScriptP1.') else: print('ScriptP1 is imported into another file.')
Izlaz:
livecricket.is
It is a function in the ScriptP1. Called from the ScriptP1.
Obrazloženje:
Funkcija Anything() navedena u skripti ScriptP1 izvodi se izravno kao glavni program, kao što pokazuje izlaz 'To je funkcija u ScriptP1.' nakon čega slijedi 'Pozvano iz skripteP1.' Kada se skripta izvodi izravno u Pythonu, varijabla __name__ postavljena je na '__main__'; posljedično, uvjet if __name__=='__main__': daje vrijednost True, pozivajući funkciju Anything(). Ispis koji slijedi potvrđuje da se skripta doista izvodi izravno.
Napravimo sada novu Python datoteku skripte pod nazivom ScriptP2.py, uvezimo ScriptP1.py u nju i pokušajmo pozvati metodu ScriptP1 bilo što().
Šifra: The SkriptaP2.py kod je naveden ovdje:
import ScriptP1 if __name__=='__main__': ScriptP1.anything() print('Called from the ScriptP2.')
Izlaz:
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.
Obrazloženje:
Priložena Python skripta pokazuje kako uvesti modul 'ScriptP1' u aktivnu skriptu. Metoda 'anything()' prisutna je u 'ScriptP1' i poziva se u glavnoj skripti. Ova se funkcija poziva, a skripta ispisuje 'Called from the ScriptP2.' za označavanje da je poziv funkcije dovršen. Ovaj tok događaja pokazuje da je funkcija navedena u 'ScriptP1' bila dostupna i uspješno izvedena u kontekstu skripte koja se sada izvodi, a koja je identificirana kao 'ScriptP2'.
Kada je izjava uvoza za ScriptP1 pokrenuta unutar ScriptP2, varijabla __name__ imala je vrijednost ScriptP1 (naziv modula); ali budući da je ScriptP2 bila prva skripta koja se pokrenula, sada će imati vrijednost __main__.
Ispisivanje vrijednosti __name__ :
Ispišimo vrijednost varijable __name__ u svakoj fazi izvođenja kako bismo vam pomogli da je bolje razumijete.
Primjer : Izvorni kod skripte ScriptP1.py Python nalazi se u nastavku:
print('Value or the variable __name__ : ' + __name__)
Izlaz:
Value or the variable __name__ : __main__
Obrazloženje:
Uzorak Python koda koji je isporučen daje vrijednost varijable __name__, koja, kada se skripta pokrene izravno, procjenjuje se kao 'main'. To znači da će se, kada se skripta pokrene izravno, blok koda koji dolazi nakon uvjeta if __name__ == '__main__': pokrenuti umjesto da bude uvezen kao modul u drugu skriptu. Ova vrsta ponašanja često se koristi za razlikovanje između izvršavanja skripte kao primarne aplikacije i njenog uvoza u drugu skriptu kao modul.
Primjer 2: A ovdje je izvorni kod skripte ScriptP2.py:
# importing the file ScriptP1.py import ScriptP1 print('Value or the variable __name__ : ' + __name__)
Izlaz:
Value or the variable __name__ : __main__
Obrazloženje:
Isporučena Python skripta koristi naredbu import za uvoz datoteke 'ScriptP1.py. ' Kada se izvrši, 'main' se ispisuje kao vrijednost varijable __name__. To znači da umjesto da se uvozi kao modul u drugu skriptu, skripta se izvršava izravno kao primarna aplikacija. Prilikom izvršavanja Python skripti, ovo je uobičajeno ponašanje; kontekst izvršenja skripte odražava se u varijabli __name__.
Sažetak :
U većini programskih jezika glavna metoda ili funkcija obično se koristi kao točka u kojoj se izvršava bilo koji program. Ali što je s Pythonom? Izvršenje Python programa (skripte) normalno počinje od nulte linije ili razine uvlačenja programa 0. Međutim, stvaranje varijable __name__ događa se prije pokretanja Python programa. Ova se varijabla može koristiti za zamjenu glavne metode u Pythonu.