Olet varmasti törmännyt Pythonissa if __name__ == "main"-konstruktioon. Mutta tiedätkö sen tarkan tarkoituksen?
Joissakin ohjelmointikielissä päämenetelmä toimii ainoana aloituskohtana ohjelman suorittamiseen. Siirtyessään muista kielistä Pythoniin, idiomi jos __nimi__ == "__main__" saattaa näyttää suorittavan saman tehtävän. Pythonissa näin ei ole.
The jos __nimi__ == "__main__" idiom sallii tietyn koodin suorittamisen, kun tiedosto suoritetaan komentosarjana. Se myös varmistaa, että samaa koodia ei suoriteta, kun tuot tiedoston moduulina.
__name__-muuttujan käyttäytymisen ymmärtäminen
The __nimi__ muuttuja on rakennettu Pythoniin. Se edustaa sen moduulin tai komentosarjan nimeä, jossa sitä käytetään. Kun komentosarja suoritetaan pääohjelmana, sen arvoksi asetetaan __main__. Jos tuot komentosarjan moduulina, muuttujan arvoksi asetetaan moduulin todellinen nimi.
Tämä saattaa olla aluksi hämmentävää, mutta katsokaa seuraavaa esimerkkiä:
Luo skripti ja nimeä se terveisiä.py. Tämä komentosarja sisältää toiminnon, joka tervehtii käyttäjää ja tulostaa arvon
__nimi__ muuttuja. Se myös pyytää käyttäjää antamaan nimensä.deftervehtiä(nimi):
Tulosta(f"Hei, {nimi}!")Tulosta("__name__: n arvo:", __nimi__)
jos __nimi__ == "__main__":
käyttäjän_nimi = input("Kirjoita nimesi: ")
tervehdys (käyttäjänimi)
muu:
Tulosta("Moduuli "tervehdys" on tuotu.")
Juoksemassa terveisiä.py skripti näyttää seuraavan tulosteen:
Arvo __nimi__ muuttuja palauttaa as __main__ koska komentosarja suoritetaan suoraan.
Luo nyt toinen skripti ja nimeä se script2.py. Tuo sitten terveisiä skripti moduulina.
tuonti terveisiäTulosta("Suoritetaan tervehdyskäsikirjoitusta...")
tervehdys.greet("Liisa")
Soittamalla tervehtiä toiminto alkaen tervehdys moduuli antaa seuraavan lähdön.
Arvo __nimi__ muuttuja muuttaa tuodun moduulin todellista nimeä. Tässä tapauksessa, terveisiä.
Tämä arvo on mitä idioomi jos __nimi__ == "__main__" etsii määrittääkseen, onko tiedosto käynnissä komentosarjana vai tuodaanko se moduulina.
Milloin if __name__ == "__main__" -rakennetta käytetään?
Voit lisätä jos __nimi__ == "__main__" rakentaa missä tahansa skriptissä. Mutta on olemassa tilanteita, joissa sen käyttö voi olla hyödyllisintä. Opit näistä skenaarioista käyttämällä alla olevaa yksinkertaista laskinohjelmaa.
# calculator.py
deflisätä(a, b):
palata a + bdefvähentää(a, b):
palata a - bdefmoninkertaistaa(a, b):
palata a * bdefjakaa(a, b):
jos b != 0:
palata a / b
muu:
palata"Virhe: Jako nollalla!"jos __nimi__ == "__main__":
Tulosta("Tervetuloa Laskuriin!")
Tulosta("Valitse toiminto:")
Tulosta("1. Lisätä")
Tulosta("2. Vähentää")
Tulosta("3. kertoa")
Tulosta("4. Jakaa")valinta = int (input("Syötä valintasi (1-4):"))
num1 = float (input("Syötä ensimmäinen numero:"))
num2 = float (input("Syötä toinen numero:"))
jos valinta == 1:
tulos = lisää (num1, num2)
Tulosta(f" summa {numero1} ja {num2} On: {tulos}")
elif valinta == 2:
tulos = vähennä (num1, num2)
Tulosta(f" Ero {numero1} ja {num2} On: {tulos}")
elif valinta == 3:
tulos = kerro (num1, num2)
Tulosta(f"Tuote {numero1} ja {num2} On: {tulos}")
elif valinta == 4:
tulos = jako (num1, num2)
Tulosta(f" Jako {numero1} kirjoittaja {num2} On: {tulos}")
muu:
Tulosta("Virheellinen valinta!")
Ensimmäinen skenaario on, kun haluat suorittaa komentosarjan itsenäisesti ja suorittaa tiettyjä toimintoja. Tämä mahdollistaa skriptin toimimisen erillisenä ohjelmana. The jos __nimi__ == "__main__" construct antaa käyttäjien olla vuorovaikutuksessa laskimen kanssa komentoriviliittymän avulla. Tämä antaa käyttäjille mahdollisuuden käyttää ohjelman toimintoja ilman, että heidän tarvitsee ymmärtää tai muokata taustalla olevaa koodia.
On edelleen mahdollista suorittaa ohjelmaa ilman jos __nimi__ == "__main__" rakentaa ja saavuttaa sama tulos, mutta koodisi menettäisi modulaarisen koodiorganisaation.
Toinen skenaario on, kun haluat omasi koodilla on modulaarinen rakenne. Näin muut ohjelmat voivat tuoda komentosarjasi moduulina ja käyttää sen toimintoja käynnistämättä tarpeettomia toimintoja.
Laskin-ohjelman tapauksessa muut ohjelmat voivat tuoda laskin moduuli käynnistämättä CLI-liitäntää ja käyttäjän syöttökehotteita. Tämä varmistaa koodin uudelleenkäytettävyyden ja modulaarisen suunnittelun. Näin laskin voidaan integroida saumattomasti suurempiin sovelluksiin.
tuonti laskin
# Laskinmoduulin toimintojen käyttäminen
tulos_lisää = calculator.add(5, 3)
Tulosta("Lisäyksen tulos:", tulos_lisää)
result_subtract = calculator.subtract(10, 4)
Tulosta("Vähennystulos:", tulos_vähennys)
Kolmas skenaario on silloin, kun haluat testaa ja korjaa Python-skripti riippumatta muista moduuleista tai komentosarjoista, jotka saattavat tuoda sen. Laskimen esimerkissä on helpompi keskittyä laskimen toimivuuden testaamiseen ilman ulkoisen koodin häiriöitä.
tuonti laskin
# Testataan laskimen toimintoja
jos __nimi__ == "__main__":
# Testaa lisäystä
tulos = calculator.add(5, 3)
Tulosta("Lisäyksen tulos:", tulos)# Testaa vähennyslaskua
tulos = calculator.subtract(8, 4)
Tulosta("Vähennystulos:", tulos)
# Testaa kertolaskua
tulos = calculator.multiply(2, 6)
Tulosta("Kertotulos:", tulos)
Yllä oleva koodi näyttää kuinka laskurin komentosarjan virheenkorjaus tehdään itsenäisesti.
Milloin on tarpeetonta käyttää if __name__ == "__main__" -rakennetta?
Kuten yllä olevista skenaarioista olet nähnyt, jos __nimi__ == "__main__" konstruktiolla erotetaan pääohjelmana käyttämäsi komentosarja ja moduulina tuotava komentosarja. Joissakin tapauksissa sen käyttö on kuitenkin tarpeetonta.
Ensimmäinen tapaus on, kun komentosarjasi on yksinkertainen eikä siinä ole uudelleenkäytettäviä toimintoja tai moduuleja, etkä aio tuoda sitä. Tässä tapauksessa sinun tulee jättää tämä rakennelma pois, koska koko komentosarja suoritetaan ajettaessa. Tämä on yleistä kertakäyttöisille komentosarjoille, jotka suorittavat tiettyä tarkoitusta ja joita ei ole tarkoitettu uudelleenkäyttöön tai tuontiin.
Toinen tapaus on, kun työskentelet interaktiivisessa Python-istunnossa esim. kun käytät Jupyter Notebookia. Vuorovaikutteisessa istunnossa kirjoitat ja suoritat koodin suoraan komentokehotteeseen tai interaktiiviseen Python-kuoreen. Kuten Python REPL (Read-Eval-Print Loop). Näin voit kokeilla koodia ja testata pieniä katkelmia, jolloin saat välittömiä tuloksia.
Näissä interaktiivisissa ympäristöissä pääohjelmana toimivan tai moduulina tuodun komentosarjan käsite ei päde. Suoritat koodinpätkät suoraan ilman perinteistä komentosarjan syöttöpistettä.
Miten Pythonin mestariksi tulee?
Päästäksesi minkä tahansa ohjelmointikielen mestariksi, sinun on ymmärrettävä, kuinka toimintojen tai työkalujen taustalla olevat käsitteet toimivat. Aivan kuten opit if __name__ == "__main__" -konstruktista tässä artikkelissa.
Taustalla olevien käsitteiden ymmärtäminen auttaa sinua tietämään tarkalleen, kuinka ohjelmasi käyttäytyy, kun käytät niitä. Ei ole kiirettä, käsitteiden oppiminen yksi kerrallaan auttaa sinua sukeltamaan syvemmälle jokaiseen niistä.