Sigurno ste naišli na konstrukciju if __name__ == "main" u Pythonu. Ali znate li njegovu točnu svrhu?

U nekim programskim jezicima glavna metoda služi kao jedina ulazna točka za izvođenje programa. Prilikom prelaska s drugih jezika na Python, idiom if __name__ == "__main__" može se činiti da će ispuniti isti zadatak. U Pythonu to nije slučaj.

The if __name__ == "__main__" idiom dopušta izvršavanje određenog koda kada se datoteka izvodi kao skripta. Također osigurava da se isti kod ne izvršava kada uvezete datoteku kao modul.

Razumijevanje ponašanja varijable __name__

The __Ime__ varijabla je ugrađena u Python. Predstavlja naziv modula ili skripte u kojoj se koristi. Kada se skripta izvršava kao glavni program, njezina je vrijednost postavljena na __glavni__. Ako uvezete skriptu kao modul, vrijednost varijable postavlja se na stvarni naziv modula.

Ovo bi u početku moglo biti zbunjujuće, ali pogledajte sljedeći primjer:

Napravite skriptu i dajte joj naziv pozdrav.py. Ova skripta će sadržavati funkciju koja pozdravlja korisnika i ispisuje vrijednost

instagram viewer
__Ime__ varijabla. Također će tražiti od korisnika da unese svoje ime.

defpozdraviti(Ime):
ispis(f"Zdravo, {Ime}!")

ispis("Vrijednost __name__:", __Ime__)

ako __ime__ == "__glavni__":
korisničko_ime = unos("Molimo unesite svoje ime: ")
pozdravi (korisničko_ime)
drugo:
ispis("Modul 'pozdrav' je uvezen.")

Pokretanje pozdrav.py skripta će prikazati sljedeći izlaz:

Vrijednost __Ime__ varijabla se vraća kao __glavni__ jer se skripta izvršava izravno.

Sada izradite drugu skriptu i dajte joj naziv skripta2.py. Zatim uvezite pozdrav skripta kao modul.

uvoz pozdrav

ispis("Izvršavanje skripte pozdrava...")
pozdrav.pozdrav("Alice")

Pozivanje pozdraviti funkcija iz pozdrav modul daje sljedeći izlaz.

Vrijednost __Ime__ varijabla mijenja stvarni naziv uvezenog modula. U ovom slučaju, pozdrav.

Ova vrijednost je ono što idiom if __name__ == "__main__" traži kako bi utvrdio izvodi li se datoteka kao skripta ili je uvezena kao modul.

Kada koristiti if __name__ == "__main__" konstrukciju?

Možete dodati if __name__ == "__main__" konstruirati u bilo kojoj skripti. Ali postoje neki scenariji u kojima njegova upotreba može biti najkorisnija. Naučit ćete o tim scenarijima pomoću jednostavnog programa kalkulatora u nastavku.

# kalkulator.py

defdodati(a, b):
povratak a + b

defoduzeti(a, b):
povratak a - b

defpomnožiti(a, b):
povratak a * b

defpodijeliti(a, b):
ako b != 0:
povratak a / b
drugo:
povratak"Pogreška: Dijeljenje s nulom!"

ako __ime__ == "__glavni__":
ispis("Dobro došli u Kalkulator!")
ispis("Odaberi operaciju:")
ispis("1. Dodati")
ispis("2. Oduzeti")
ispis("3. Pomnožiti")
ispis("4. Podijeliti")

izbor = int (ulaz("Unesite svoj izbor (1-4): "))

num1 = float (ulaz("Unesite prvi broj: "))
num2 = float (ulaz("Unesite drugi broj: "))

ako izbor == 1:
rezultat = zbroj (broj1, broj2)
ispis(f"Zbroj od {num1} i {num2} je: {proizlaziti}")
elif izbor == 2:
rezultat = oduzimanje (broj1, broj2)
ispis(f"Razlika između {num1} i {num2} je: {proizlaziti}")
elif izbor == 3:
rezultat = množenje (broj1, broj2)
ispis(f"Proizvod od {num1} i {num2} je: {proizlaziti}")
elif izbor == 4:
rezultat = dijeljenje (broj1, broj2)
ispis(f "Podjela {num1} po {num2} je: {proizlaziti}")
drugo:
ispis("Neispravan izbor!")

Prvi scenarij je kada želite samostalno pokrenuti skriptu i izvršiti određene radnje. To omogućuje da skripta funkcionira kao samostalan program. The if __name__ == "__main__" konstrukt omogućuje korisnicima interakciju s kalkulatorom pomoću sučelja naredbenog retka. To korisnicima daje mogućnost korištenja funkcionalnosti programa bez potrebe za razumijevanjem ili modificiranjem osnovnog koda.

I dalje je moguće pokrenuti program bez if __name__ == "__main__" konstruirati i postići isti rezultat, ali bi vaš kod izgubio modularnu organizaciju koda.

Drugi scenarij je kada želite svoje kod za modularni dizajn. To omogućuje drugim programima da uvezu vašu skriptu kao modul i koriste njezine funkcije bez pokretanja nepotrebnih funkcija.

U slučaju programa kalkulatora, drugi programi mogu uvesti kalkulator modul bez pokretanja CLI sučelja i korisničkih upita za unos. To osigurava ponovnu upotrebu koda i modularni dizajn. Stoga se kalkulatoru omogućuje besprijekorna integracija u veće aplikacije.

uvoz kalkulator

# Korištenje funkcija iz modula kalkulatora
rezultat_dodaj = kalkulator.dodaj(5, 3)
ispis("Rezultat zbrajanja:", rezultat_dodavanje)

rezultat_oduzimanje = kalkulator.oduzimanje(10, 4)
ispis("Rezultat oduzimanja:", rezultat_oduzimanje)

Treći scenarij je kada želite testirajte i otklonite pogreške u svojoj Python skripti neovisno o svim drugim modulima ili skriptama koje bi ga mogle uvesti. U primjeru kalkulatora, to olakšava fokusiranje na testiranje funkcionalnosti kalkulatora bez smetnji vanjskog koda.

uvoz kalkulator

# Testiranje funkcija kalkulatora
ako __ime__ == "__glavni__":
# Test dodavanje
rezultat = kalkulator.dodaj(5, 3)
ispis("Rezultat zbrajanja:", rezultat)

# Test oduzimanja
rezultat = kalkulator.oduzimanje(8, 4)
ispis("Rezultat oduzimanja:", rezultat)

# Testirajte množenje
rezultat = kalkulator.množenje(2, 6)
ispis("Rezultat množenja:", rezultat)

Gornji kôd pokazuje kako samostalno otkloniti pogreške u skripti kalkulatora.

Kada je nepotrebno koristiti konstrukciju if __name__ == "__main__"?

Kao što ste vidjeli u gornjim scenarijima, upotreba if __name__ == "__main__" konstrukt je razlikovati skriptu koju izvodite kao glavni program i onu koju uvozite kao modul. Međutim, postoje neki slučajevi u kojima je njegova uporaba nepotrebna.

Prvi slučaj je kada je vaša skripta jednostavna i nema funkcije ili module za višekratnu upotrebu i ne namjeravate je uvoziti. U ovom slučaju, trebali biste izostaviti ovu konstrukciju jer se cijela skripta izvršava kada se pokrene. To je uobičajeno za jednokratne skripte koje imaju određenu svrhu i nisu namijenjene za ponovnu upotrebu ili uvoz.

Drugi slučaj je kada radite u interaktivnoj Python sesiji, npr. kada koristite Jupyter Notebook. U interaktivnoj sesiji upisujete i izvršavate kod izravno u naredbenom retku ili u interaktivnoj Python ljusci. Kao što je Python REPL (Read-Eval-Print Loop). To vam omogućuje da eksperimentirate s kodom i testirate male isječke, dajući trenutne rezultate.

U tim interaktivnim okruženjima, koncept skripte koja se izvodi kao glavni program ili uvezena kao modul se ne primjenjuje. Izravno izvršavate isječke koda bez potrebe za tradicionalnom ulaznom točkom skripte.

Kako se postaje majstor Pythona?

Da biste postali majstor u bilo kojem programskom jeziku, morate razumjeti kako funkcioniraju temeljni koncepti funkcija ili alata. Baš kao što ste naučili o konstrukciji if __name__ == "__main__" u ovom članku.

Razumijevanje temeljnih koncepata pomoći će vam da točno znate kako će se vaš program ponašati kada ih koristite. Nema žurbe, učenje pojmova jedan po jedan pomoći će vam da dublje zaronite u svaki od njih.