Što se nalazi u (Pythonovom) __name__?

Uvod u varijablu _ _name_ _ i njezinu upotrebu u Pythonu

__name__Varijablu ste najvjerojatnije vidjeli kad ste prošli kroz Python kôd. Ispod vidite primjer isječka koda kako to može izgledati:

if __name__ == '__main__': main()

U ovom članku želim vam pokazati kako možete koristiti ovu varijablu za stvaranje modula u Pythonu.

Zašto se koristi varijabla _ _name_ _?

__name__Varijabla (dvije donje prije i poslije), poseban Python varijabla. Dobiva svoju vrijednost ovisno o tome kako izvršavamo skriptu koja sadrži.

Ponekad napišete skriptu s funkcijama koje bi mogle biti korisne i u drugim skriptama. U Pythonu tu skriptu možete uvesti kao modul u drugu skriptu.

Zahvaljujući ovoj posebnoj varijabli možete odlučiti želite li pokrenuti skriptu. Ili da želite uvesti funkcije definirane u skripti.

Koje vrijednosti može sadržavati varijabla __name__?

Kada pokrenete skriptu, __name__varijabla je jednaka __main__. Kada uvozite skriptu koja sadrži, ona će sadržavati ime skripte.

Pogledajmo ova dva slučaja korištenja i opišimo postupak s dvije ilustracije.

Scenarij 1 - Pokrenite skriptu

Pretpostavimo da smo napisali scenarijnameScript.py kako slijedi:

def myFunction(): print 'The value of __name__ is ' + __name__
def main(): myFunction()
if __name__ == '__main__': main()

Ako pokrenete nameScript.py, slijedi se postupak u nastavku.

Prije pokretanja svih ostalih kodova, __name__varijabla je postavljena na __main__. Nakon toga,maini myFunctionpokreću se def naredbe. Budući da se uvjet procjenjuje na tačno, poziva se glavna funkcija. To, pak, naziva myFunction. Ovo ispisuje vrijednost __main__.

Scenarij 2 - Uvezite skriptu u drugu skriptu

Ako, na primjer importingScript.py, želimo ponovno koristiti myFunction u drugoj skripti , možemo uvesti nameScript.pykao modul.

Kôd u importingScript.pymogao bi biti sljedeći:

import nameScript as ns
ns.myFunction()

Tada imamo dva opsega: jedan importingScripti drugi opseg nameScript. Na ilustraciji ćete vidjeti kako se razlikuje od prvog slučaja upotrebe.

U importingScript.py __name__varijabla je postavljena na __main__. Uvozom nameScript, Python počinje tražiti datoteku dodavanjem .pyimena modula. Zatim pokreće kod sadržan u uvezenoj datoteci.

Ali ovaj put topostavljeno je na nameScript. Opet se pokreću def izjave za main i myFunction. Ali, sada se stanje procjenjuje na netačno i glavno se ne poziva.

U importingScript.py nazivamo myFunction koji daje nameScript. NameScript je poznat myFunctionu kad je ta funkcija definirana.

Ako biste ispisivali __name__na importingScript-u, to bi izlazilo __main__. Razlog tome je što Python koristi vrijednost poznatu u opsegu importingScript-a.

Zaključak

U ovom kratkom članku objasnio sam kako __name__varijablu možete koristiti za pisanje modula. Te module možete pokrenuti i samostalno. To se može učiniti korištenjem načina na koji se vrijednosti ovih varijabli mijenjaju ovisno o tome gdje se pojavljuju.