Olete kindlasti Pythonis kohanud konstruktsiooni if __name__ == "peamine". Kuid kas teate selle täpset eesmärki?
Mõnes programmeerimiskeeles toimib põhimeetod programmi täitmise ainsaks sisenemispunktiks. Teistelt keeltelt Pythonile üleminekul idioom if __name__ == "__main__" võib tunduda, et see täidab sama ülesande. Pythonis see nii ei ole.
The if __name__ == "__main__" idioom võimaldab faili käivitamisel skriptina käivitada konkreetse koodi. Samuti tagab see, et faili moodulina importimisel ei käivitu sama koodi.
Muutuja käitumise __nimi__ mõistmine
The __nimi__ muutuja on Pythoni sisse ehitatud. See tähistab selle mooduli või skripti nime, milles seda kasutatakse. Kui skript käivitub põhiprogrammina, määratakse selle väärtuseks __main__. Kui impordite skripti moodulina, määratakse muutuja väärtuseks mooduli tegelik nimi.
See võib alguses segadust tekitada, kuid vaadake järgmist näidet:
Looge skript ja nimetage see tervitused.py. See skript sisaldab funktsiooni, mis tervitab kasutajat ja prindib väärtuse __nimi__ muutuv. Samuti palub see kasutajal oma nime sisestada.
deftervitada(nimi):
print(f"Tere, {nimi}!")print("__name__ väärtus:", __nimi__)
kui __nimi__ == "__main__":
kasutajanimi = input("Palun sisestage oma nimi: ")
tere (kasutaja_nimi)
muidu:
print("Moodul "tervitusi" on imporditud.")
Jooksevad tervitused.py skript kuvab järgmise väljundi:
Väärtus __nimi__ muutuja tagastab as __main__ sest skript käivitub otse.
Nüüd looge uus skript ja nimetage see script2.py. Seejärel importige tervitusi skript moodulina.
importida tervitusiprint("Tervituste skripti täitmine...")
tervitused.tervita ("Alice")
Helistades tervitada funktsioonist tervitus moodul annab järgmise väljundi.
Väärtus __nimi__ muutuja muudab imporditud mooduli tegelikku nime. Sel juhul, tervitusi.
See väärtus on idioom if __name__ == "__main__" otsib, et teha kindlaks, kas fail töötab skriptina või imporditakse moodulina.
Millal kasutada konstruktsiooni if __name__ == "__main__"?
Saate lisada if __name__ == "__main__" ehitada mis tahes skriptis. Kuid on mõned stsenaariumid, kus selle kasutamine võib olla kõige kasulikum. Nende stsenaariumide kohta saate teada, kasutades allolevat lihtsat kalkulaatoriprogrammi.
# kalkulaator.py
deflisama(a, b):
tagasi a + bdeflahutada(a, b):
tagasi a - bdefkorrutada(a, b):
tagasi a * bdefjagama(a, b):
kui b != 0:
tagasi a / b
muidu:
tagasi"Viga: nulliga jagamine!"kui __nimi__ == "__main__":
print("Tere tulemast kalkulaatorisse!")
print("Valige toiming:")
print("1. Lisama")
print("2. Lahutage")
print("3. korrutada")
print("4. jaga")valik = int (input("Sisestage oma valik (1-4):"))
number1 = float (sisend("Sisestage esimene number:"))
number2 = float (sisend("Sisestage teine number:"))
kui valik == 1:
tulemus = lisa (num1, num2)
print(f" summa {num1} ja {num2} on: {tulemus}")
elif valik == 2:
tulemus = lahutada (arv1, arv2)
print(f"Erinevus {num1} ja {num2} on: {tulemus}")
elif valik == 3:
tulemus = korrutada (num1, num2)
print(f"toode {num1} ja {num2} on: {tulemus}")
elif valik == 4:
tulemus = jaga (num1, num2)
print(f "jaotus {num1} kõrval {num2} on: {tulemus}")
muidu:
print("Vigane valik!")
Esimene stsenaarium on siis, kui soovite skripti iseseisvalt käitada ja konkreetseid toiminguid teha. See võimaldab skriptil töötada eraldiseisva programmina. The if __name__ == "__main__" construct võimaldab kasutajatel käsurea liidese abil kalkulaatoriga suhelda. See annab kasutajatele võimaluse kasutada programmi funktsioone, ilma et nad peaksid mõistma või muutma aluseks olevat koodi.
Programmi on endiselt võimalik käivitada ka ilma if __name__ == "__main__" ehitada ja saavutada sama tulemus, kuid teie kood kaotaks modulaarse koodikorralduse.
Teine stsenaarium on siis, kui soovite oma kood on modulaarne disain. See võimaldab teistel programmidel importida teie skripti moodulina ja kasutada selle funktsioone ilma tarbetuid funktsioone käivitamata.
Kalkulaatoriprogrammi puhul saavad teised programmid importida kalkulaator moodul ilma CLI-liidese ja kasutaja sisendviipade käivitamiseta. See tagab koodi korduvkasutatavuse ja modulaarse disaini. Seega võimaldab kalkulaatorit sujuvalt suurematesse rakendustesse integreerida.
importida kalkulaator
# Kalkulaatori mooduli funktsioonide kasutamine
result_add = kalkulaator.add(5, 3)
print("Lisamise tulemus:", result_add)
result_subtract = kalkulaator.subtract(10, 4)
print("Lahutamise tulemus:", tulemus_lahutamine)
Kolmas stsenaarium on siis, kui soovite testige ja siluge oma Pythoni skripti sõltumata muudest moodulitest või skriptidest, mis võivad seda importida. Kalkulaatori näites on lihtsam keskenduda kalkulaatori funktsionaalsuse testimisele ilma välise koodi segamiseta.
importida kalkulaator
# Kalkulaatori funktsioonide testimine
kui __nimi__ == "__main__":
# Testi lisamist
tulemus = kalkulaator.add(5, 3)
print("Lisamise tulemus:", tulemus)# Testige lahutamist
result = kalkulaator.subtract(8, 4)
print("Lahutamise tulemus:", tulemus)
# Testige korrutamist
tulemus = kalkulaator.multiply(2, 6)
print("Korrutamise tulemus:", tulemus)
Ülaltoodud kood näitab, kuidas kalkulaatori skripti iseseisvalt siluda.
Millal pole konstruktsiooni if __name__ == "__main__" kasutamine vajalik?
Nagu olete ülaltoodud stsenaariumides näinud, kasutatakse if __name__ == "__main__" konstruktsiooni eesmärk on eristada põhiprogrammina töötavat skripti ja moodulina imporditavat skripti. Siiski on juhtumeid, kus selle kasutamine pole vajalik.
Esimene juhtum on siis, kui teie skript on lihtne ja sellel ei ole korduvkasutatavaid funktsioone ega mooduleid ning te ei kavatse seda importida. Sel juhul peaksite selle konstruktsiooni välja jätma, kuna kogu skript käivitatakse käivitamisel. See on tavaline ühekordsete skriptide puhul, millel on kindel eesmärk ja mis pole mõeldud korduskasutamiseks ega importimiseks.
Teine juhtum on siis, kui töötate interaktiivses Pythoni seansis nt. Jupyteri sülearvuti kasutamisel. Interaktiivsel seansil sisestate ja käivitate koodi otse käsureal või interaktiivses Pythoni kestas. Näiteks Python REPL (Read-Eval-Print Loop). See võimaldab teil katsetada koodi ja testida väikseid juppe, mis annab kohesed tulemused.
Nendes interaktiivsetes keskkondades põhiprogrammina töötava või moodulina imporditud skripti kontseptsioon ei kehti. Käivitate koodilõike otse, ilma et oleks vaja traditsioonilist skripti sisestuspunkti.
Kuidas saada Pythoni meistriks?
Mis tahes programmeerimiskeele meistriks saamiseks peate mõistma, kuidas funktsioonide või tööriistade põhikontseptsioonid töötavad. Just nagu õppisite sellest artiklist konstruktsiooni if __name__ == "__main__" kohta.
Aluskontseptsioonide mõistmine aitab teil täpselt teada, kuidas teie programm neid kasutades käitub. Pole kiiret, mõistete ükshaaval õppimine aitab teil igasse neist sügavamale sukelduda.