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

instagram viewer
ü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özlettel

nyomtatá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 + b

defkivonni(a, b):
Visszatérés a - b

defszaporodnak(a, b):
Visszatérés a * b

deffeloszt(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.