logo

__ime__ u Pythonu

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.