Python Hoofdfunctie en -methode: Begrijp def Main()

โšก Slimme samenvatting

Python De `main`-functie markeert het startpunt waar de interpreter een programma begint uit te voeren. Deze functie, gedefinieerd met `def main()` en gekoppeld aan de `if __name__ == โ€œ__main__โ€`-voorwaarde, scheidt herbruikbare modulecode van de uitvoering van zelfstandige scripts.

  • ๐Ÿš€ Ingangspunt: De hoofdfunctie definieert waar de uitvoering begint, zodat lezers de programmastroom vanaf รฉรฉn duidelijk beginpunt kunnen volgen.
  • ๐Ÿงฉ def main():: Wikkelping De logica binnen `def main()` houdt de voorbereiding en uitvoering gescheiden van de functie- en klassedefinities.
  • ๐Ÿ”’ __naam__ bewaker: De controle if __name__ == โ€œ__main__โ€ zorgt ervoor dat main() alleen wordt uitgevoerd bij directe uitvoering, nooit bij het importeren.
  • ๐Ÿ” Herbruikbare modules: Beveiligde code zorgt ervoor dat andere scripts uw functies kunnen importeren zonder het hele programma te hoeven uitvoeren.
  • โ€‹ Invoer via de opdrachtregel: Een main()-functie is de meest logische plek om argumenten uit sys.argv te lezen en een exitstatus terug te geven.
  • ๐Ÿค– AI-assistentie: AI-assistenten zoals GitHub Copilot genereren standaardcode voor main() en de __name__ guard op basis van een korte prompt.

Python Belangrijkste functie

Wat is Python Hoofdfunctie?

De Python hoofdfunctie is het startpunt van elk programma. Wanneer het programma wordt uitgevoerd, Python De interpreter voert de code sequentieel uit. De hoofdfunctie wordt alleen uitgevoerd wanneer deze als zodanig wordt uitgevoerd. Python Het programma zal de hoofdfunctie niet uitvoeren als deze als module is geรฏmporteerd.

Wat is de functie def main()? PythonOm dit te begrijpen, bekijk de volgende voorbeeldcode, die deel uitmaakt van de kern. Python programmering basisprincipes:

def main() Voorbeeld 1

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

Python Belangrijkste functie

Hier zien we twee afdrukken: de ene is gedefinieerd binnen de hoofdfunctie en luidt "Hello World!", de andere is onafhankelijk en luidt "Guru99โ€. Wanneer je de functie def main() uitvoert:

  • Enkel en alleen "Guru99โ€ print uit
  • en niet de code โ€œHallo wereld!โ€

Het is omdat we de oproep niet hebben gemeld functie โ€œif__name__== โ€œ__main__โ€.

Het is belangrijk dat u na het definiรซren van de hoofdfunctie de code aanroept met if__name__== โ€œ__main__โ€ en vervolgens de code uitvoert. Alleen dan krijgt u de uitvoer โ€œhello world!โ€ in de programmeerconsole. Bekijk de volgende code

def main() Voorbeeld 2

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

if __name__ == "__main__":
    main()

print("Guru99")

GuruIn dit geval staat er 99 afgedrukt.

Python Belangrijkste functie

Hier is de uitleg,

  • . Python interpreter een bronbestand leest, zal het alle daarin gevonden code uitvoeren.
  • . Python voert het โ€œbronbestandโ€ uit als het hoofdprogramma, het stelt de speciale variabele (__name__) in op een waarde (โ€œ__main__โ€).
  • Wanneer u de hoofdfunctie in Python uitvoert, leest deze de โ€œifโ€ -instructie en controleert of __name__ gelijk is aan __main__.
  • In Python โ€œif__naam__== โ€œ__main__โ€ stelt u in staat om de Python bestanden ofwel als herbruikbare modules of zelfstandige programma's.

Waarom een โ€‹โ€‹main()-functie gebruiken in Python?

Python Het verplicht je niet om een โ€‹โ€‹`main`-functie te schrijven, maar ervaren ontwikkelaars gebruiken er wel een in bijna elk niet-triviaal script. Het `def main()`-patroon brengt orde in een bestand en maakt de code veilig herbruikbaar. Hier zijn de belangrijkste redenen om het te gebruiken:

  • Duidelijk toegangspunt: Een main()-functie laat de lezer precies zien waar het programma begint, waardoor de logica gemakkelijk te volgen is.
  • Herbruikbare modules: Code De voorwaarde `if __name__ == โ€œ__main__โ€` wordt alleen uitgevoerd bij directe uitvoering, zodat andere bestanden uw functies kunnen importeren zonder neveneffecten.
  • Lokaal bereik: Variabelen die binnen main() worden aangemaakt, blijven lokaal, waardoor onbedoelde conflicten met globale namen elders in de module worden voorkomen.
  • Eenvoudiger testen: Door de logica in main() te isoleren, kan een testsuite deze direct aanroepen en het resultaat controleren.
  • Gezamenlijke conventie: Een main()-functie is een algemeen erkend signaal van het startpunt van een programma, wat de onderhoudbaarheid tussen verschillende teams verbetert.

Kortom, een main()-functie is optioneel in PythonMaar het zorgt ervoor dat grotere programma's leesbaar, testbaar en veilig te importeren blijven.

De __name__ variabele en Python Module

Om het belang van de variabele __name__ te begrijpen in Python hoofdfunctiemethode, overweeg de volgende code:

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

if __name__ == "__main__":
    main()

print("Guru99")

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

De __name__ variabele en Python Module

Bedenk nu dat code als een module wordt geรฏmporteerd

import MainFunction

print("done")

De __name__ variabele en Python Module

Hier is de code-uitleg: Zoals C, Python gebruikt == voor vergelijking terwijl = voor toewijzing. Python interpreter gebruikt de hoofdfunctie op twee manieren

directe vlucht:

  • __naam__=__hoofd__
  • if statement == True, en het script in _main_zal worden uitgevoerd

importeren als module

  • __name__= bestandsnaam van de module
  • if statement == false, en het script in __main__ zal niet worden uitgevoerd

Wanneer de code wordt uitgevoerd, wordt gecontroleerd op de modulenaam met 'if'. Dit mechanisme zorgt ervoor dat de hoofdfunctie alleen wordt uitgevoerd als directe uitvoering en niet wanneer deze als module wordt geรฏmporteerd.

Bovenstaande voorbeelden zijn Python 3 codes, als je wilt gebruiken Python 2. Houd rekening met de volgende code

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

print "Guru99"

In Python 3, je hoeft if__name niet te gebruiken. De volgende code werkt ook

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

Let op: Zorg ervoor dat u na het definiรซren van de hoofdfunctie een beetje inspringing laat staan โ€‹โ€‹en dat u de code niet direct onder de def main(): functie declareert, anders krijgt u een inspringfout.

Hoe geef je opdrachtregelargumenten door aan de Python main() functie

Een main()-functie is de meest logische plek om invoer te verwerken die een gebruiker via de commandoregel doorgeeft. Python Deze waarden worden opgeslagen in de lijst sys.argv, die door de standaard sys-module wordt geleverd. Het eerste item, sys.argv[0], is de scriptnaam, en elke waarde daarna is een argument dat door de gebruiker wordt opgegeven.

Het volgende voorbeeld leest en print opdrachtregelargumenten vanuit een main()-functie:

import sys

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

if __name__ == "__main__":
    main()

Als je het bestand opslaat als script.py en het uitvoert python script.py alpha betaHet programma print de scriptnaam en de lijst ['alpha', 'beta']. Omdat de waarden binnen main() binnenkomen, blijft de logica overzichtelijk en gemakkelijk te testen.

Hier volgen een paar praktische tips voor het werken met opdrachtregelinvoer:

  • Verwijder de scriptnaam: Gebruik sys.argv[1:] om alleen de argumenten te lezen die de gebruiker heeft ingevoerd.
  • Gebruik argparse voor echte tools: De ingebouwde argparse-module parseert vlaggen, opties en helptekst veel veiliger dan het handmatig lezen van sys.argv.
  • Geef een exitcode terug: Wikkel de aanroep in sys.exit(main()) zodat de retourwaarde van main() de exitstatus van het proces wordt.
  • Vroegtijdig valideren: Controleer het aantal en het type argumenten bovenaan de main()-functie voordat je de rest van het programma uitvoert.

Dit patroon transformeert een eenvoudig script in een betrouwbaar commandoregelprogramma, terwijl het tegelijkertijd...ping elke stap binnen รฉรฉn enkele, testbare main() functie.

Python De main()-functie versus andere programmeertalen

Ontwikkelaars afkomstig uit C, C++of Java Vaak wordt een verplichte main()-functie verwacht. Python Het werkt anders omdat het een geรฏnterpreteerde taal is, dus de interpreter voert een bestand gewoon van boven naar beneden uit. De main()-functie in Python Het is daarom eerder een conventie dan een regel.

  • C, C++, C# en Java: Een main()-functie is een verplicht startpunt. De runtime roept deze automatisch aan en er kan er slechts รฉรฉn per programma zijn.
  • Python: Er is geen main()-functie nodig. De uitvoering begint bij de eerste regel van het bestand en def main() wordt alleen uitgevoerd als uw code deze aanroept.
  • De bewaker: Het if __name__ == โ€œ__main__โ€-blok geeft Python Een functie met een vergelijkbaar doel als een gecompileerde main()-functie, namelijk het markeren van code die alleen uitgevoerd moet worden wanneer het bestand het hoofdprogramma is.

Terwijl andere programmeertalen een main()-ingangspunt afdwingen, Python Laat de keuze aan u over en biedt dezelfde duidelijkheid door middel van conventie in plaats van een compilerregel.

Veelgestelde vragen

__main__ is de naam Python Geeft het hoofdscript weer, dat wordt gedetecteerd via de variabele __name__. main() is een gewone, door de gebruiker gedefinieerde functie die de programmalogica bevat. Ze werken samen, maar __main__ is een omgevingsnaam, terwijl main() een functie is.

Door het als laatste te plaatsen, wordt ervoor gezorgd dat Python Alle bovenstaande functies en klassen zijn al gedefinieerd voordat het blok main() aanroept. Als dit eerder wordt uitgevoerd, kunnen er namen worden aangeroepen die nog niet zijn gedefinieerd, wat een NameError kan veroorzaken.

Nee. Python De naam main heeft geen speciale betekenis. Je kunt de startfunctie elke naam geven die je wilt, maar de naam main() is een sterke conventie die andere ontwikkelaars het startpunt van het programma aangeeft.

Ja. Een main()-functie kan een waarde retourneren, en een veelvoorkomend patroon is sys.exit(main()), zodat de retourwaarde de exitcode van het proces wordt. Het retourneren van 0 geeft aan dat het proces is geslaagd, terwijl een waarde die niet nul is, een fout aangeeft.

Zonder de guard wordt main() zowel uitgevoerd wanneer het bestand direct wordt uitgevoerd als wanneer het wordt geรฏmporteerd. Andere programma's die alleen de functies ervan willen hergebruiken, zouden ongewenste uitvoering en neveneffecten veroorzaken.

De body van main() moet ingesprongen zijn onder de regel def main():. Als je de volgende instructie links uitlijnt, blijft er geen ingesprongen blok in de functie achter, dus Python Geeft een IndentationError. Voeg consistente spaties of een tab toe.

GitHub Copilot vult automatisch het `def main()`-skelet en de `if __name__ == โ€œ__main__โ€`-voorwaarde aan op basis van een korte opmerking. Het suggereert ook argumentparsing en docstrings, zodat je je kunt concentreren op de programmalogica in plaats van op standaardcode.

In AI- en machine learning-projecten is een main()-functie het startpunt voor trainings- of inferentiescripts. Deze functie leest hyperparameters uit commandoregelargumenten, zorgt ervoor dat hulpprogramma's herbruikbaar blijven en maakt het testen en automatiseren van experimenten eenvoudiger.

Vat dit bericht samen met: