Biztosan találkoztál az if __name__ == "fő" konstrukcióval a Pythonban. De tudod a pontos célját?
Egyes programozási nyelvekben a fő módszer szolgál egyetlen belépési pontként a program végrehajtásához. Más nyelvekről Pythonra való áttérés közben az idióma if __name__ == "__main__" úgy tűnik, hogy ugyanazt a feladatot teljesíti. Pythonban ez nem így van.
A if __name__ == "__main__" Az idiom lehetővé teszi egy adott kód végrehajtását, amikor a fájl szkriptként fut. Azt is biztosítja, hogy ugyanaz a kód ne futjon le, amikor a fájlt modulként importálja.
A __név__ változó viselkedésének megértése
A __név__ változó be van építve a Pythonba. Annak a modulnak vagy szkriptnek a nevét jelenti, amelyben használják. Amikor egy szkript főprogramként fut le, az értéke a következőre van állítva __fő__. Ha a parancsfájlt modulként importálja, akkor a változó értéke a modul tényleges nevére lesz beállítva.
Ez elsőre zavaró lehet, de nézzük meg a következő példát:
Hozzon létre egy szkriptet, és nevezze el
üdvözlettel.py. Ez a szkript tartalmazni fog egy függvényt, amely üdvözli a felhasználót, és kiírja az értékét __név__ változó. Azt is kéri a felhasználótól, hogy adja meg a nevét.defüdvözöl(név):
nyomtatás(f" Szia, {név}!")nyomtatás("__name__ értéke:", __név__)
ha __név__ == "__fő__":
user_name = input("Kérem írja be a nevét: ")
üdvözlet (felhasználónév)
más:
nyomtatás("Az üdvözlet modul importálva.")
Futás a üdvözlettel.py script a következő kimenetet jeleníti meg:
Az értéke a __név__ változó visszaadja mint __fő__ mert a szkript közvetlenül fut le.
Most hozzon létre egy másik szkriptet, és nevezze el script2.py. Ezután importálja a üdvözlettel script modulként.
import üdvözlettelnyomtatás("Az üdvözlő forgatókönyv végrehajtása...")
greetings.greet("Alice")
Hívja a üdvözöl funkció a üdvözlet modul a következő kimenetet adja.
Az értéke a __név__ változó megváltoztatja az importált modul tényleges nevét. Ebben az esetben, üdvözlettel.
Ez az érték az idióma if __name__ == "__main__" keresi annak meghatározására, hogy egy fájl szkriptként fut-e vagy modulként importálódik.
Mikor kell használni az if __name__ == "__main__" konstrukciót?
Hozzáadhatja a if __name__ == "__main__" bármilyen szkriptben építeni. De vannak olyan forgatókönyvek, amikor a használata a leghasznosabb lehet. Ezeket a forgatókönyveket az alábbi egyszerű számolóprogram segítségével ismerheti meg.
# calculator.py
defadd hozzá(a, b):
Visszatérés a + bdefkivonni(a, b):
Visszatérés a - bdefszaporodnak(a, b):
Visszatérés a * bdeffeloszt(a, b):
ha b != 0:
Visszatérés a / b
más:
Visszatérés"Hiba: Osztás nullával!"ha __név__ == "__fő__":
nyomtatás("Üdvözöljük a Számológépben!")
nyomtatás("Válasszon műveletet:")
nyomtatás("1. Hozzáadás")
nyomtatás("2. kivonás")
nyomtatás("3. szorzás")
nyomtatás("4. Feloszt")választás = int (input("Írja be a választását (1-4):"))
szám1 = float (input("Írja be az első számot:"))
szám2 = float (input("Írja be a második számot:"))
ha választás == 1:
eredmény = összeadás (num1, num2)
nyomtatás(f "Az összege {szám1} és {szám2} ez: {eredmény}")
elif választás == 2:
eredmény = kivonás (szám1, szám2)
nyomtatás(f "A különbség a között {szám1} és {szám2} ez: {eredmény}")
elif választás == 3:
eredmény = szorzás (szám1, szám2)
nyomtatás(f"A termék szorzata {szám1} és {szám2} ez: {eredmény}")
elif választás == 4:
eredmény = osztás (num1, num2)
nyomtatás(f "A felosztása {szám1} által {szám2} ez: {eredmény}")
más:
nyomtatás(– Érvénytelen választás!)
Az első forgatókönyv az, amikor önállóan szeretne futtatni egy szkriptet, és bizonyos műveleteket végrehajtani. Ez lehetővé teszi, hogy a szkript önálló programként működjön. A if __name__ == "__main__" construct lehetővé teszi a felhasználók számára, hogy a számológéppel a parancssori felületen kommunikáljanak. Ez lehetővé teszi a felhasználók számára a program funkcióinak használatát anélkül, hogy megérteniük vagy módosítaniuk kellene a mögöttes kódot.
Továbbra is lehetséges a program futtatása a nélkül if __name__ == "__main__" építeni, és ugyanazt az eredményt elérni, de a kód elvesztené a moduláris kódszervezést.
A második forgatókönyv az, amikor azt szeretné kódot, hogy moduláris felépítésű legyen. Ez lehetővé teszi más programok számára, hogy modulként importálják a szkriptet, és használhassák annak funkcióit anélkül, hogy szükségtelen funkciókat aktiválnának.
A számolóprogram esetében más programok importálhatják a számológép modult a CLI interfész és a felhasználói beviteli promptok aktiválása nélkül. Ez biztosítja a kód újrafelhasználhatóságát és a moduláris felépítést. Így a számológép zökkenőmentesen integrálható nagyobb alkalmazásokba.
import számológép
# A számológép modul funkcióinak használata
result_add = calculator.add(5, 3)
nyomtatás("Hozzáadás eredménye:", eredmény_hozzáadás)
result_subtract = calculator.subtract(10, 4)
nyomtatás("Kivonás eredménye:", eredmény_kivonás)
A harmadik forgatókönyv az, amikor akarod Tesztelje és hibakeresése a Python szkript függetlenül minden más modultól vagy szkripttől, amely esetleg importálja. A számológép példájában megkönnyíti, hogy a számológép működésének tesztelésére összpontosítson külső kód által okozott interferencia nélkül.
import számológép
# A számológép funkcióinak tesztelése
ha __név__ == "__fő__":
# Tesztelje a kiegészítést
eredmény = kalkulátor.add(5, 3)
nyomtatás("Hozzáadás eredménye:", eredmény)# Tesztelje a kivonást
eredmény = calculator.subtract(8, 4)
nyomtatás("Kivonás eredménye:", eredmény)
# Tesztelje a szorzást
eredmény = kalkulátor.multiply(2, 6)
nyomtatás("Szorzás eredménye:", eredmény)
A fenti kód bemutatja a számológép szkriptjének önálló hibakeresését.
Mikor nem szükséges az if __name__ == "__main__" konstrukció használata?
Amint azt a fenti forgatókönyvekben láthatta, a if __name__ == "__main__" A konstrukció célja megkülönböztetni a fő programként futtatott szkriptet és a modulként importált szkriptet. Vannak azonban olyan esetek, amikor szükségtelen a használata.
Az első eset az, amikor a szkript egyszerű, nem tartalmaz újrafelhasználható függvényeket vagy modulokat, és nem kívánja importálni. Ebben az esetben ezt a konstrukciót ki kell hagynia, mivel a teljes szkript lefut futás közben. Ez gyakori az olyan egyszeri szkripteknél, amelyek meghatározott célt teljesítenek, és nem újrafelhasználásra vagy importálásra szolgálnak.
A másik eset, amikor egy interaktív Python szekcióban dolgozol pl. a Jupyter Notebook használatakor. Interaktív munkamenetben a kódot közvetlenül a parancssorba vagy egy interaktív Python shellbe kell begépelni és végrehajtani. Ilyen például a Python REPL (Read-Eval-Print Loop). Ez lehetővé teszi, hogy kísérletezzen a kóddal, és tesztelje a kis részleteket, így azonnali eredményeket kaphat.
Ezekben az interaktív környezetekben a fő programként futó vagy modulként importált szkript fogalma nem érvényes. Ön közvetlenül végrehajtja a kódrészleteket, anélkül, hogy hagyományos szkript belépési pontra lenne szüksége.
Hogyan lehetsz mester a Pythonban?
Ahhoz, hogy bármely programozási nyelv mesterévé váljon, meg kell értenie, hogyan működnek a funkciók vagy eszközök mögöttes koncepciók. Ugyanúgy, ahogy ebben a cikkben megismerte az if __name__ == "__main__" konstrukciót.
A mögöttes fogalmak megértése segít abban, hogy pontosan tudja, hogyan fog működni a program, amikor ezeket használja. Nincs sietség, a fogalmak egyenkénti megtanulása segít mélyebbre merülni mindegyikben.