Python Fő függvény és metódus: A def Main() megértése

⚡ Okos összefoglaló

Python A main függvény jelöli a kezdőpontot, ahol az interpreter elkezdi futtatni a programot. A def main() paranccsal definiálva és az if __name__ == “__main__” őrrel párosítva elválasztja az újrafelhasználható modulkódot az önálló szkriptvégrehajtástól.

  • 🚀 Belépési pont: A main függvény határozza meg, hogy hol kezdődik a végrehajtás, így az olvasók egyetlen egyértelmű kiindulópontból követhetik a program folyamatát.
  • 🧩 def main():: Tekerjükping A def main() függvényen belüli logika elkülöníti a beállítást és a végrehajtást a függvény- és osztálydefinícióktól.
  • 🔒 __name__ őr: Az if __name__ == “__main__” ellenőrzés csak közvetlen végrehajtáskor futtatja a main() függvényt, importáláskor soha.
  • 🔁 Újrafelhasználható modulok: A védett kód lehetővé teszi, hogy más szkriptek importálják a függvényeidet anélkül, hogy a teljes programot elindítanák.
  • ⌨️ Parancssori bemenet: A main() függvény a sys.argv argumentumok beolvasásának és a kilépési állapot visszaadásának természetes helye.
  • 🤖 AI segítség: MI asszisztensek, mint például a GitHub Copilot scaffold main() sablon és a __name__ őr egy rövid promptból.

Python Fő funkció

Mi a Python Fő funkció?

Az Python fő funkció bármely program kiindulópontja. A program futtatásakor a Python Az interpreter szekvenciálisan futtatja a kódot. A main függvény csak akkor hajtódik végre, ha egy Python program. Nem fogja futtatni a main függvényt, ha modulként importáljuk.

Miben található a def main() függvény? PythonEnnek megértéséhez vegyük figyelembe a következő példakódot, amely a mag részét képezi Python programozás alapismeretek:

def main() 1. példa

def main():
     print ("Hello World!")
print ("Guru99")

Python Fő funkció

Itt kétféle nyomtatási eredményt kaptunk – az egyik a főfüggvényen belül van definiálva, ami a „Hello World!”, a másik pedig független, ami a „Guru99”. Amikor a def main() függvényt futtatod:

  • Csak "Guru99 hüvelykes nyomatok
  • és nem a „Hello World!” kódot.

Ez azért van, mert nem jelentettük be a felhívást függvény „if__name__== „__main__”.

Fontos, hogy a fő függvény definiálása után hívd meg a kódot if__name__== „__main__”-val, majd futtasd le a kódot, csak akkor kapod meg a „hello world!” kimenetet. a programozókonzolban. Vegye figyelembe a következő kódot

def main() 2. példa

def main():
    print("Hello World!")

if __name__ == "__main__":
    main()

print("Guru99")

GuruEbben az esetben 99 van nyomtatva.

Python Fő funkció

Itt a magyarázat,

  • Amikor Python Az interpreter beolvas egy forrásfájlt, akkor az abban található összes kódot végrehajtja.
  • Amikor Python a „forrásfájlt” főprogramként futtatja, a speciális változót (__name__) állítja be értékre („__main__”).
  • Amikor végrehajtja a fő függvényt a pythonban, akkor az elolvassa az „if” utasítást, és ellenőrzi, hogy a __name__ megegyezik-e a __main__-val.
  • In Python "if__name__== "__main__" lehetővé teszi a futtatását Python fájlokat akár mint újrafelhasználható modulok vagy önálló programok.

Miért érdemes main() függvényt használni? Python?

Python nem kényszerít arra, hogy main függvényt írj, mégis a tapasztalt fejlesztők szinte minden nem triviális szkriptben használnak egyet. A def main() minta rendet teremt a fájlokban, és biztonságossá teszi a kód újrafelhasználását. Íme a főbb okok, amiért érdemes használni:

  • Tiszta belépési pont: A main() függvény pontosan megmondja az olvasónak, hogy hol kezdődik a program, így a logika könnyen követhető.
  • Újrafelhasználható modulok: Code A `_name__ == “__main__” csak közvetlen végrehajtás esetén fut, így más fájlok mellékhatások nélkül importálhatják a függvényeidet.`
  • Helyi hatókör: A main() függvényen belül létrehozott változók lokálisak maradnak, ami elkerüli a véletlen ütközéseket a modul más részein található globális nevekkel.
  • Egyszerűbb tesztelés: A main() függvényben a logika elkülönítése lehetővé teszi, hogy a tesztkészlet közvetlenül meghívja azt, és ellenőrizze az eredményt.
  • Megosztott konvenció: A main() függvény a program belépési pontjának széles körben elismert jelzése, amely javítja a karbantarthatóságot a csapatok között.

Röviden, a main() függvény opcionális Python, de a nagyobb programokat olvasható, tesztelhető és biztonságosan importálható állapotban tartja.

A __name__ változó és Python Modulok

A __name__ változó fontosságának megértéséhez Python fő függvénymódszer, vegye figyelembe a következő kódot:

def main():
    print("hello world!")

if __name__ == "__main__":
    main()

print("Guru99")

print("Value in built variable name is:  ",__name__)

A __name__ változó és Python Modulok

Most vegyük figyelembe, hogy a kód modulként importálódik

import MainFunction

print("done")

A __name__ változó és Python Modulok

Íme a kód magyarázata: Mint C, Python az ==-t használja az összehasonlításhoz, míg a =-t a hozzárendeléshez. Python Az interpreter kétféleképpen használja a fő funkciót

közvetlen futás:

  • __name__=__main__
  • if utasítás == True, és a _main_ben lévő parancsfájl végrehajtásra kerül

modulként importálni

  • __name__= a modul fájlneve
  • if utasítás == false, és a __main__ szkript nem kerül végrehajtásra

A kód végrehajtása után ellenőrzi a modul nevét az „if” karakterlánccal. Ez a mechanizmus biztosítja, hogy a fő funkció csak közvetlen futásként kerüljön végrehajtásra, modulként importálva nem.

A fenti példák Python 3 kód, ha használni szeretnéd Python 2, kérjük, vegye figyelembe a következő kódot

def main():
  print "Hello World!"
  
if __name__== "__main__":
  main()

print "Guru99"

In Python 3, nem kell használnia az if__name értéket. A következő kód is működik

def main():
  print("Hello World!")
  
main()
print("Guru99")

Jegyzet: Ügyeljen arra, hogy a main függvény meghatározása után hagyjon némi behúzást, és ne deklarálja a kódot közvetlenül a def main(): függvény alatt, különben behúzási hibát fog adni.

Parancssori argumentumok átadása a Python fő() függvény

A main() függvény a felhasználó által a parancssorban átadott bemenet kezelésének természetes helye. Python ezeket az értékeket a sys.argv listában tárolja, amelyet a standard sys modul biztosít. Az első elem, a sys.argv[0], a szkript neve, és minden utána következő érték a felhasználó által megadott argumentum.

A következő példa parancssori argumentumokat olvas be és nyomtat ki egy main() függvényből:

import sys

def main():
    print("Script name:", sys.argv[0])
    print("Arguments passed:", sys.argv[1:])

if __name__ == "__main__":
    main()

Ha script.py néven mented el a fájlt és futtatod python script.py alfa béta, a program kinyomtatja a szkript nevét és a ['alpha', 'beta'] listát. Mivel az értékek a main() függvényen belül érkeznek, a logika rendezett marad és könnyen tesztelhető.

Íme néhány gyakorlati tipp a parancssori bevitellel való munkához:

  • Vágd ki a szkript nevét: A sys.argv[1:] használatával csak a felhasználó által beírt argumentumokat olvashatja be.
  • Használd az argparse-t valódi eszközökhöz: A beépített argparse modul sokkal biztonságosabban elemzi a jelzőket, opciókat és súgószövegeket, mint a sys.argv kézi olvasása.
  • Kilépési kód visszaadása: A hívást sys.exit(main()) függvényként kell becsomagolni, így a main() visszatérési értéke lesz a folyamat kilépési állapota.
  • Korai validálás: A program többi részének futtatása előtt ellenőrizd a main() függvény elején található argumentumok számát és típusát.

Ez a minta egy egyszerű szkriptet megbízható parancssori eszközzé alakít, miközben keeping minden lépés egyetlen, tesztelhető main() függvényen belül.

Python main() függvény vs. más programozási nyelvek

C nyelvről érkező fejlesztők, C++vagy Java gyakran elvárják egy kötelező main() függvény meglétét. Python másképp működik, mivel ez egy interpretált nyelv, így az interpreter egyszerűen lefuttat egy fájlt a felső sortól az aljáig. A main() függvény a Python tehát inkább konvenció, mint szabály.

  • C, C++, C# és Java: A main() függvény egy kötelező belépési pont. A futtatókörnyezet automatikusan meghívja, és programonként csak egy lehet.
  • Python: Nincs szükség main() függvényre. A végrehajtás a fájl első soránál kezdődik, és a def main() csak akkor fut le, ha a kód meghívja.
  • Az őr: Az if __name__ == “__main__” blokk a következőt adja: Python egy lefordított main() függvényhez hasonló cél, olyan kód megjelölésével, amely csak akkor fut, ha a fájl a főprogram.

Tehát míg más nyelvek kikényszerítenek egy main() belépési pontot, Python rád bízza a választást, ugyanazt az egyértelműséget konvención keresztül kínálva a fordítási szabály helyett.

GYIK

__main__ a név Python megadja a legfelsőbb szintű szkriptet, amelyet a __name__ változón keresztül lehet detektálni. A main() egy egyszerű felhasználó által definiált függvény, amely a programlogikát tartalmazza. Együttműködnek, de a __main__ egy környezetnév, míg a main() egy függvény.

Az utolsó helyre helyezve garantált Python már definiálta az összes fenti függvényt és osztályt, mielőtt a blokk meghívná a main() függvényt. Ha korábban futtatjuk, az olyan nevekre hivatkozhat, amelyek még nem definiáltak, és NameError hibát okozhat.

Nem. Python A main névnek nem tulajdonít különleges jelentést. A belépő függvényt bármilyennek hívhatod, de a main() elnevezés egy erős konvenció, amely jelzi a program kiindulópontját a többi fejlesztő számára.

Igen. Egy main() függvény visszaadhat egy értéket, és egy gyakori minta sys.exit(main()) függvényt ír, így a return lesz a folyamat kilépési kódja. A 0 visszaadása sikert, míg a nullától eltérő érték hibát jelez.

A Guard nélkül a main() függvény mind a fájl közvetlen végrehajtásakor, mind importálásakor lefut. Más programok, amelyek csak a függvényeit szeretnék újra felhasználni, nem kívánt végrehajtást és mellékhatásokat váltanának ki.

A main() függvény törzsét a def main(): sor alá kell behúzni. A következő, flush-left utasítás megírása a függvényt behúzott blokk nélkül hagyja, tehát Python IndentationError hibát okoz. Adjon hozzá konzisztens szóközöket vagy tabulátort.

A GitHub Copilot automatikusan kiegészíti a def main() vázat és az if __name__ == “__main__” őrt egy rövid megjegyzésből. Javasolja az argumentumelemzést és a dokumentációs karakterláncokat is, így a sablonos szövegek helyett a programlogikára koncentrálhatsz.

A mesterséges intelligencia és gépi tanulási projektekben a main() függvény a belépési pont a betanító vagy következtetési szkriptekhez. Hiperparamétereket olvas be a parancssori argumentumokból, lehetővé teszi a segédprogramok importálhatóságát az újrafelhasználás érdekében, valamint megkönnyíti a kísérletek tesztelését és automatizálását.

Foglald össze ezt a bejegyzést a következőképpen: