Jūs tikriausiai susidūrėte su if __name__ == "pagrindinė" konstrukcija Python. Bet ar žinote tikslų jo paskirtį?
Kai kuriose programavimo kalbose pagrindinis metodas yra vienintelis programos vykdymo įėjimo taškas. Pereinant iš kitų kalbų į Python, idioma if __name__ == "__pagrindinis__" gali atrodyti, kad atlieka tą pačią užduotį. Python taip nėra.
The if __name__ == "__pagrindinis__" idiom leidžia vykdyti konkretų kodą, kai failas vykdomas kaip scenarijus. Taip pat užtikrinama, kad importuojant failą kaip modulį nebūtų vykdomas tas pats kodas.
__name__ kintamojo elgesio supratimas
The __vardas__ kintamasis yra integruotas į Python. Tai reiškia modulio arba scenarijaus, kuriame jis naudojamas, pavadinimą. Kai scenarijus vykdomas kaip pagrindinė programa, jo reikšmė nustatoma į __pagrindinis__. Jei importuojate scenarijų kaip modulį, kintamojo reikšmė nustatoma į tikrąjį modulio pavadinimą.
Iš pradžių tai gali būti painu, bet pažvelkite į šį pavyzdį:
Sukurkite scenarijų ir pavadinkite jį sveikinimai.py
. Šiame scenarijuje bus funkcija, kuri pasveikina vartotoją ir išspausdina reikšmę __vardas__ kintamasis. Jis taip pat paprašys vartotojo įvesti savo vardą.defpasveikinti(vardas):
spausdinti (f" Sveiki, {vardas}!")spausdinti ("__name__ vertė:", __vardas__)
jeigu __vardas__ == "__pagrindinis__":
vartotojo_vardas = input("Įveskite savo vardą:")
pasveikinti (naudotojo_vardas)
Kitas:
spausdinti („Modulis „sveikinimai“ buvo importuotas.)
Paleidžiant sveikinimai.py scenarijus parodys šią išvestį:
Vertė __vardas__ kintamoji grąža kaip __pagrindinis__ nes scenarijus vykdomas tiesiogiai.
Dabar sukurkite kitą scenarijų ir pavadinkite jį script2.py. Tada importuokite sveikinimai scenarijus kaip modulis.
importuoti sveikinimaispausdinti („Vykdomas sveikinimo scenarijus...“)
sveikinimai.sveikinu("Alisa")
Skambindamas į pasveikinti funkcija iš pasisveikinimas modulis suteikia tokią išvestį.
Vertė __vardas__ kintamasis keičia faktinį importuoto modulio pavadinimą. Tokiu atveju, sveikinimai.
Ši vertė yra idioma if __name__ == "__pagrindinis__" ieško, kad nustatytų, ar failas veikia kaip scenarijus, ar importuojamas kaip modulis.
Kada naudoti if __name__ == "__main__" konstrukciją?
Galite pridėti if __name__ == "__pagrindinis__" konstruoti bet kokiu scenarijumi. Tačiau yra keletas scenarijų, kai jo naudojimas gali būti naudingiausias. Sužinosite apie šiuos scenarijus naudodami toliau pateiktą paprastą skaičiuoklės programą.
# calculator.py
defpapildyti(a, b):
grąžinti a + bdefatimti(a, b):
grąžinti a - bdefpadauginti(a, b):
grąžinti a * bdefpadalinti(a, b):
jeigu b != 0:
grąžinti a / b
Kitas:
grąžinti"Klaida: padalijimas iš nulio!"jeigu __vardas__ == "__pagrindinis__":
spausdinti ("Sveiki atvykę į skaičiuotuvą!")
spausdinti ("Pasirinkite operaciją:")
spausdinti ("1. Papildyti")
spausdinti ("2. Atimti")
spausdinti ("3. padauginti")
spausdinti ("4. Padalinti")pasirinkimas = int (input("Įveskite savo pasirinkimą (1-4):"))
skaičius1 = float (input("Įveskite pirmąjį skaičių:"))
skaičius2 = float (input("Įveskite antrąjį skaičių:"))
jeigu pasirinkimas == 1:
rezultatas = pridėti (num1, num2)
spausdinti (f“ suma {num1} ir {num2} yra: {rezultatas}")
elifas pasirinkimas == 2:
rezultatas = atimti (skaičius1, skaičius2)
spausdinti (f" Skirtumas tarp {num1} ir {num2} yra: {rezultatas}")
elifas pasirinkimas == 3:
rezultatas = padauginti (num1, num2)
spausdinti (f" produktas {num1} ir {num2} yra: {rezultatas}")
elifas pasirinkimas == 4:
rezultatas = padalyti (num1, num2)
spausdinti (f "Padalijimas {num1} pateikė {num2} yra: {rezultatas}")
Kitas:
spausdinti ("Neteisingas pasirinkimas!")
Pirmasis scenarijus yra tada, kai norite paleisti scenarijų savarankiškai ir atlikti konkrečius veiksmus. Tai leidžia scenarijui veikti kaip atskira programa. The if __name__ == "__pagrindinis__" construct leidžia vartotojams bendrauti su skaičiuotuvu naudojant komandinės eilutės sąsają. Tai suteikia vartotojams galimybę naudotis programos funkcijomis nesuprantant ar nekeičiant pagrindinio kodo.
Vis dar galima paleisti programą be if __name__ == "__pagrindinis__" sukurti ir pasiekti tą patį rezultatą, tačiau jūsų kodas prarastų modulinį kodo organizavimą.
Antrasis scenarijus yra tada, kai norite savo kodas turėti modulinį dizainą. Tai leidžia kitoms programoms importuoti jūsų scenarijų kaip modulį ir naudoti jo funkcijas nesuaktyvinant nereikalingų funkcijų.
Skaičiuoklės programos atveju kitos programos gali importuoti skaičiuotuvas modulį nesuaktyvinus CLI sąsajos ir vartotojo įvesties raginimų. Tai užtikrina kodo pakartotinį naudojimą ir modulinį dizainą. Taigi, skaičiuotuvą galima sklandžiai integruoti į didesnes programas.
importuoti skaičiuotuvas
# Skaičiuotuvo modulio funkcijų naudojimas
result_add = skaičiuotuvas.add(5, 3)
spausdinti ("Papildymo rezultatas:", rezultatas_pridėti)
result_subtract = skaičiuotuvas.subtract(10, 4)
spausdinti ("Atimties rezultatas:", rezultatas_atimti)
Trečiasis scenarijus yra tada, kai norite išbandykite ir derinkite savo Python scenarijų nepriklausomai nuo kitų modulių ar scenarijų, kurie gali jį importuoti. Skaičiuoklės pavyzdyje lengviau sutelkti dėmesį į skaičiuoklės funkcionalumo patikrinimą be išorinio kodo trukdžių.
importuoti skaičiuotuvas
# Skaičiuotuvo funkcijų testavimas
jeigu __vardas__ == "__pagrindinis__":
# Išbandykite papildymą
rezultatas = calculator.add(5, 3)
spausdinti ("Papildymo rezultatas:", rezultatas)# Išbandykite atimtį
rezultatas = calculator.subtract(8, 4)
spausdinti ("Atimties rezultatas:", rezultatas)
# Išbandykite daugybą
rezultatas = calculator.multiply(2, 6)
spausdinti ("Daugybos rezultatas:", rezultatas)
Aukščiau pateiktas kodas parodo, kaip savarankiškai derinti skaičiuoklės scenarijų.
Kada nebūtina naudoti if __name__ == "__main__" konstrukciją?
Kaip matėte aukščiau pateiktuose scenarijuose, naudojant if __name__ == "__pagrindinis__" Konstrukcija skirta atskirti scenarijų, kurį naudojate kaip pagrindinę programą, ir tą, kurį importuojate kaip modulį. Tačiau yra atvejų, kai jo naudoti nereikia.
Pirmuoju atveju jūsų scenarijus yra paprastas ir neturi daugkartinio naudojimo funkcijų ar modulių ir jūs neketinate jo importuoti. Tokiu atveju turėtumėte praleisti šią konstrukciją, nes visas scenarijus vykdomas paleidžiant. Tai būdinga vienkartiniams scenarijams, kurie atlieka konkretų tikslą ir nėra skirti pakartotiniam naudojimui ar importavimui.
Kitas atvejis, kai dirbate interaktyvioje Python sesijoje pvz. kai naudojate Jupyter Notepad. Interaktyvioje sesijoje kodą įvedate ir vykdote tiesiogiai komandų eilutėje arba interaktyviame Python apvalkale. Tokie kaip Python REPL (Read-Eval-Print Loop). Tai leidžia eksperimentuoti su kodu ir išbandyti mažus fragmentus, kad gautumėte tiesioginių rezultatų.
Šiose interaktyviose aplinkose scenarijaus, veikiančio kaip pagrindinė programa arba importuoto kaip modulis, koncepcija netaikoma. Jūs tiesiogiai vykdote kodo fragmentus, neturėdami tradicinio scenarijaus įvesties taško.
Kaip tapti Python meistru?
Norėdami tapti bet kurios programavimo kalbos meistru, turite suprasti, kaip veikia pagrindinės funkcijų ar įrankių sąvokos. Lygiai taip pat, kaip sužinojote apie if __name__ == "__main__" konstrukciją šiame straipsnyje.
Pagrindinių sąvokų supratimas padės tiksliai žinoti, kaip programa veiks, kai jas naudosite. Neskubėkite, mokydami sąvokas po vieną galėsite pasinerti į kiekvieną iš jų giliau.