Zagotovo ste v Pythonu naleteli na konstrukcijo if __name__ == "main". Toda ali poznate njegov natančen namen?

V nekaterih programskih jezikih glavna metoda služi kot edina vstopna točka za izvajanje programa. Pri prehodu z drugih jezikov na Python je idiom if __name__ == "__main__" se morda zdi, da izpolnjujejo isto nalogo. V Pythonu temu ni tako.

The if __name__ == "__main__" idiom omogoča izvedbo določene kode, ko se datoteka izvaja kot skript. Prav tako poskrbi, da se ista koda ne izvede, ko uvozite datoteko kot modul.

Razumevanje vedenja spremenljivke __name__

The __ime__ spremenljivka je vgrajena v Python. Predstavlja ime modula ali skripta, v katerem se uporablja. Ko se skript izvaja kot glavni program, je njegova vrednost nastavljena na __glavni__. Če uvozite skript kot modul, je vrednost spremenljivke nastavljena na dejansko ime modula.

To je sprva morda zmedeno, vendar si oglejte naslednji primer:

Ustvarite skript in ga poimenujte pozdrav.py. Ta skript bo vseboval funkcijo, ki pozdravi uporabnika in natisne vrednost

instagram viewer
__ime__ spremenljivka. Prav tako bo uporabnika prosil, da vnese svoje ime.

defpozdraviti(ime):
natisni(f "Pozdravljeni, {name}!")

natisni("Vrednost __name__:", __ime__)

če __ime__ == "__glavni__":
uporabniško_ime = vnos("Prosimo, vnesite svoje ime:")
pozdravi (uporabniško_ime)
drugače:
natisni("Modul 'pozdrav' je bil uvožen.")

Vodenje pozdrav.py skript bo prikazal naslednje rezultate:

Vrednost __ime__ spremenljivka se vrne kot __glavni__ ker se skript izvaja neposredno.

Zdaj ustvarite drug skript in ga poimenujte script2.py. Nato uvozite pozdravi skripta kot modul.

uvoz pozdravi

natisni("Izvajanje pozdravnega skripta ...")
pozdrav.pozdrav("Alice")

Klicanje pozdraviti funkcijo od pozdrav modul daje naslednje rezultate.

Vrednost __ime__ spremenljivka spremeni dejansko ime uvoženega modula. V tem primeru, pozdravi.

Ta vrednost je idiom if __name__ == "__main__" išče, da ugotovi, ali se datoteka izvaja kot skript ali je uvožena kot modul.

Kdaj uporabiti konstrukcijo if __name__ == "__main__"?

Dodate lahko if __name__ == "__main__" konstruirajte v kateri koli skripti. Vendar pa obstaja nekaj scenarijev, kjer je uporaba lahko najbolj koristna. S pomočjo spodnjega preprostega kalkulatorskega programa boste izvedeli o teh scenarijih.

# kalkulator.py

defdodati(a, b):
vrnitev a + b

defodšteti(a, b):
vrnitev a - b

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

defrazdeliti(a, b):
če b != 0:
vrnitev a/b
drugače:
vrnitev"Napaka: Deljenje z ničlo!"

če __ime__ == "__glavni__":
natisni("Dobrodošli v kalkulatorju!")
natisni("Izberi operacijo:")
natisni("1. Dodaj")
natisni("2. odštej")
natisni("3. Pomnoži")
natisni("4. razdeli")

izbira = int (vhod("Vnesite svojo izbiro (1-4): "))

num1 = float (vhod("Vnesite prvo številko: "))
num2 = float (vhod("Vnesite drugo številko: "))

če izbira == 1:
rezultat = seštej (num1, num2)
natisni(f "Vsota {num1} in {num2} je: {rezultat}")
elif izbira == 2:
rezultat = odštej (num1, num2)
natisni(f "Razlika med {num1} in {num2} je: {rezultat}")
elif izbira == 3:
rezultat = pomnoži (num1, num2)
natisni(f "Izdelek {num1} in {num2} je: {rezultat}")
elif izbira == 4:
rezultat = deli (num1, num2)
natisni(f "Razdelitev {num1} avtor {num2} je: {rezultat}")
drugače:
natisni("Neveljavna izbira!")

Prvi scenarij je, ko želite neodvisno zagnati skript in izvesti določena dejanja. To omogoča, da skript deluje kot samostojen program. The if __name__ == "__main__" konstrukt omogoča uporabnikom interakcijo s kalkulatorjem prek vmesnika ukazne vrstice. To daje uporabnikom možnost uporabe funkcionalnosti programa, ne da bi morali razumeti ali spreminjati osnovno kodo.

Še vedno je mogoče zagnati program brez if __name__ == "__main__" zgraditi in doseči enak rezultat, vendar bi vaša koda izgubila modularno organizacijo kode.

Drugi scenarij je, ko želite svojega kodo za modularno zasnovo. To omogoča drugim programom, da uvozijo vaš skript kot modul in uporabljajo njegove funkcije, ne da bi sprožili nepotrebne funkcije.

V primeru programa kalkulator lahko drugi programi uvozijo kalkulator modul brez sprožitve vmesnika CLI in pozivov za vnos uporabnika. To zagotavlja ponovno uporabnost kode in modularno zasnovo. Tako omogoča brezhibno integracijo kalkulatorja v večje aplikacije.

uvoz kalkulator

# Uporaba funkcij iz modula kalkulatorja
rezultat_dodaj = kalkulator.dodaj(5, 3)
natisni("Rezultat seštevanja:", rezultat_dodaj)

rezultat_odštej = kalkulator.odštej(10, 4)
natisni("Rezultat odštevanja:", rezultat_odštevanje)

Tretji scenarij je, ko želite preizkusite in odpravite napake v skriptu Python neodvisno od drugih modulov ali skriptov, ki bi ga lahko uvozili. V primeru kalkulatorja se je lažje osredotočiti na preizkušanje funkcionalnosti kalkulatorja brez motenj zunanje kode.

uvoz kalkulator

# Preizkušanje funkcij kalkulatorja
če __ime__ == "__glavni__":
# Testni dodatek
rezultat = kalkulator.dodaj(5, 3)
natisni("Rezultat dodajanja:", rezultat)

# Preizkusite odštevanje
rezultat = kalkulator.odštej(8, 4)
natisni("Rezultat odštevanja:", rezultat)

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

Zgornja koda prikazuje, kako neodvisno odpravljati napake v skriptu kalkulatorja.

Kdaj ni potrebno uporabiti konstrukcije if __name__ == "__main__"?

Kot ste videli v zgornjih scenarijih, je uporaba if __name__ == "__main__" konstrukt je za razlikovanje skripta, ki ga izvajate kot glavni program, in tistega, ki ga uvažate kot modul. Obstajajo pa primeri, ko je uporaba nepotrebna.

Prvi primer je, ko je vaš skript preprost in nima funkcij ali modulov za večkratno uporabo in ga ne nameravate uvoziti. V tem primeru bi morali ta konstrukt izpustiti, saj se ob zagonu izvede celoten skript. To je običajno za enkratne skripte, ki opravljajo določen namen in niso namenjeni ponovni uporabi ali uvozu.

Drugi primer je, ko delate v interaktivni seji Python, npr. pri uporabi Jupyter Notebook. V interaktivni seji vnesete in izvedete kodo neposredno v ukazni poziv ali v interaktivni lupini Python. Kot je Python REPL (Read-Eval-Print Loop). To vam omogoča eksperimentiranje s kodo in preizkušanje majhnih izrezkov, kar vam daje takojšnje rezultate.

V teh interaktivnih okoljih koncept skripta, ki se izvaja kot glavni program ali uvožen kot modul, ne velja. Neposredno izvajate delčke kode, ne da bi potrebovali tradicionalno vstopno točko skripta.

Kako postaneš mojster Pythona?

Če želite postati mojster katerega koli programskega jezika, morate razumeti, kako delujejo osnovni koncepti funkcij ali orodij. Tako kot ste izvedeli o konstruktu if __name__ == "__main__" v tem članku.

Razumevanje temeljnih konceptov vam bo pomagalo natančno vedeti, kako se bo vaš program obnašal, ko jih boste uporabili. Nikamor se ne mudi, učenje konceptov enega za drugim vam bo pomagalo, da se poglobite v vsakega od njih.