Python Glavna funkcija i metoda: Razumijevanje def Main()

โšก Pametni saลพetak

Python Glavna funkcija oznaฤava poฤetnu toฤku gdje interpreter poฤinje izvrลกavati program. Definirana s def main() i uparena s if __name__ == โ€œ__main__โ€ guardom, odvaja kod modula za viลกekratnu upotrebu od samostalnog izvrลกavanja skripte.

  • ๐Ÿš€ Ulazna toฤka: Glavna funkcija definira gdje poฤinje izvrลกavanje, tako da ฤitatelji mogu pratiti tijek programa s jednog jasnog poฤetnog mjesta.
  • ๐Ÿงฉ def glavni():: Zamotajteping Logika unutar def main() funkcije drลพi postavljanje i izvrลกavanje odvojenim od definicija funkcija i klasa.
  • ๐Ÿ”’ __ime__ ฤuvar: Provjera if __name__ == โ€œ__main__โ€ pokreฤ‡e main() samo pri izravnom izvrลกavanju, nikada pri uvozu.
  • ๐Ÿ” Moduli za viลกekratnu upotrebu: Zaลกtiฤ‡eni kod omoguฤ‡uje drugim skriptama uvoz vaลกih funkcija bez pokretanja cijelog programa.
  • โŒจ๏ธ Unos u naredbeni redak: Funkcija main() je prirodno mjesto za ฤitanje argumenata sys.argv i vraฤ‡anje statusa izlaza.
  • ๐Ÿค– AI pomoฤ‡: AI asistenti kao ลกto su GitHub Copilot scaffold main() boilerplate i __name__ guard iz kratkog prompta.

Python Glavna funkcija

ล to je Python Glavna funkcija?

The Python glavna funkcija je poฤetna toฤka svakog programa. Kada se program pokrene, Python Interpreter izvrลกava kod sekvencijalno. Glavna funkcija se izvrลกava samo kada se pokreฤ‡e kao Python program. Neฤ‡e pokrenuti glavnu funkciju ako je uvezen kao modul.

U ฤemu je funkcija def main(). PythonDa biste to razumjeli, razmotrite sljedeฤ‡i primjer koda, koji je dio jezgre Python programiranje osnove:

def main() Primjer 1

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

Python Glavna funkcija

Ovdje imamo dva ispisa - jedan je definiran unutar glavne funkcije, a to je "Pozdrav svijete!", a drugi je neovisan, a to je "Guru99โ€. Kada pokrenete funkciju def main ():

  • Samo "GuruIspisi od 99โ€
  • a ne kod "Hello World!"

To je zato ลกto nismo objavili poziv funkcija โ€œif__name__== โ€œ__main__โ€.

Vaลพno je da nakon definiranja glavne funkcije pozovete kod pomoฤ‡u if__name__== โ€œ__main__โ€ i zatim pokrenete kod, samo tada ฤ‡ete dobiti izlaz โ€œzdravo svijetu!โ€ u programskoj konzoli. Razmotrite sljedeฤ‡i kรดd

def main() Primjer 2

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

if __name__ == "__main__":
    main()

print("Guru99")

GuruU ovom sluฤaju ispisan je broj 99.

Python Glavna funkcija

Evo objaลกnjenja,

  • Kada Python interpreter ฤita izvornu datoteku, izvrลกit ฤ‡e sav kod koji se u njoj nalazi.
  • Kada Python pokreฤ‡e โ€œizvornu datotekuโ€ kao glavni program, postavlja posebnu varijablu (__name__) da ima vrijednost (โ€œ__main__โ€).
  • Kada izvrลกite glavnu funkciju u pythonu, ona ฤ‡e tada proฤitati naredbu โ€œifโ€ i provjeriti je li __name__ jednako __main__.
  • In Python โ€œif__name__== โ€œ__main__โ€ omoguฤ‡uje vam pokretanje Python datoteke bilo kao viลกekratni moduli ili samostalni programi.

Zaลกto koristiti funkciju main() u Python?

Python ne prisiljava vas da napiลกete glavnu funkciju, no iskusni programeri je koriste u gotovo svakom netrivijalnom skriptu. Uzorak def main() unosi red u datoteku i ฤini kod sigurnim za ponovnu upotrebu. Evo glavnih razloga za njegovo koriลกtenje:

  • Jasna ulazna toฤka: Funkcija main() govori ฤitatelju toฤno gdje program poฤinje, tako da je logiku lako pratiti.
  • Moduli za viลกekratnu upotrebu: Code zaลกtiฤ‡eno s if __name__ == โ€œ__main__โ€ izvrลกava se samo pri izravnom izvrลกavanju, tako da druge datoteke mogu uvesti vaลกe funkcije bez nuspojava.
  • Lokalni opseg: Varijable kreirane unutar main() funkcije ostaju lokalne, ลกto sprjeฤava sluฤajne sukobe s globalnim imenima drugdje u modulu.
  • Lakลกe testiranje: Izoliranje logike u main() omoguฤ‡uje testnom paketu da ga izravno pozove i provjeri rezultat.
  • Zajedniฤka konvencija: Funkcija main() je ลกiroko prepoznat signal ulazne toฤke programa, ลกto poboljลกava odrลพavanje meฤ‘u timovima.

Ukratko, funkcija main() je opcionalna u Python, ali odrลพava veฤ‡e programe ฤitljivima, testiranima i sigurnima za uvoz.

Varijabla __name__ i Python Moduli

Da bismo razumjeli vaลพnost varijable __name__ u Python metoda glavne funkcije, razmotrite sljedeฤ‡i kod:

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

if __name__ == "__main__":
    main()

print("Guru99")

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

Varijabla __name__ i Python Moduli

Sada razmislite, kod se uvozi kao modul

import MainFunction

print("done")

Varijabla __name__ i Python Moduli

Ovdje je objaลกnjenje koda: Kao C, Python koristi == za usporedbu dok = za dodjelu. Python interpreter koristi glavnu funkciju na dva naฤina

izravna voลพnja:

  • __ime__=__glavni__
  • if izjava == True, a skripta u _main_bit ฤ‡e izvrลกena

uvoz kao modul

  • __name__= naziv datoteke modula
  • if iskaz == false, a skripta u __main__ neฤ‡e biti izvrลกena

Kada se kรดd izvrลกi, provjerit ฤ‡e naziv modula s "if". Ovaj mehanizam osigurava da se glavna funkcija izvrลกava samo kao izravno pokretanje, a ne kada se uvozi kao modul.

Gornji primjeri su Python 3 koda, ako ลพelite koristiti Python 2, razmotrite sljedeฤ‡i kรดd

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

print "Guru99"

In Python 3, ne morate koristiti if__name. Sljedeฤ‡i kod takoฤ‘er radi

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

Biljeลกka: Pazite da nakon definiranja glavne funkcije ostavite malo uvlake i ne deklarirate kod toฤno ispod funkcije def main(): inaฤe ฤ‡e dati pogreลกku uvlake.

Kako prenijeti argumente naredbenog retka na Python glavna() funkcija

Funkcija main() je prirodno mjesto za obradu unosa koje korisnik prosljeฤ‘uje u naredbenom retku. Python pohranjuje te vrijednosti u popis sys.argv, koji pruลพa standardni sys modul. Prva stavka, sys.argv[0], je naziv skripte, a svaka vrijednost nakon nje je argument koji daje korisnik.

Sljedeฤ‡i primjer ฤita i ispisuje argumente naredbenog retka iz funkcije main():

import sys

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

if __name__ == "__main__":
    main()

Ako spremite datoteku kao script.py i pokrenete python script.py alfa beta, program ispisuje naziv skripte i popis ['alpha', 'beta']. Buduฤ‡i da vrijednosti stiลพu unutar main(), logika ostaje organizirana i jednostavna za testiranje.

Evo nekoliko praktiฤnih savjeta za rad s unosom iz naredbenog retka:

  • Izreลพite naziv skripte: Koristite sys.argv[1:] za ฤitanje samo argumenata koje je korisnik upisao.
  • Koristite argparse za prave alate: Ugraฤ‘eni modul argparse parsira zastavice, opcije i tekst pomoฤ‡i puno sigurnije nego ruฤno ฤitanje sys.argv datoteke.
  • Vrati izlazni kod: Zatvorite poziv kao sys.exit(main()) tako da povratna vrijednost main() postane status izlaza procesa.
  • Rano potvrdite: Provjerite broj i vrstu argumenata na vrhu funkcije main() prije pokretanja ostatka programa.

Ovaj obrazac pretvara jednostavnu skriptu u pouzdan alat naredbenog retka, a istovremeno odrลพavaping svaki korak unutar jedne, testirane main() funkcije.

Python Funkcija main() u odnosu na druge programske jezike

Programeri koji dolaze iz C-a, C++, ili Java ฤesto oฤekuju obaveznu funkciju main(). Python radi drugaฤije jer je interpretirani jezik, pa interpreter jednostavno pokreฤ‡e datoteku od gornjeg retka do dna. Funkcija main() u Python stoga je konvencija, a ne pravilo.

  • C, C++, C# i Java: Funkcija main() je obavezna ulazna toฤka. Runtime je automatski poziva, a moลพe postojati samo jedna po programu.
  • Python: Nije potrebna funkcija main(). Izvrลกavanje poฤinje od prvog retka datoteke, a def main() se izvrลกava samo ako je vaลก kod pozove.
  • Straลพar: Blok if __name__ == โ€œ__main__โ€ daje Python svrha sliฤna kompiliranoj main() funkciji oznaฤavanjem koda koji bi se trebao izvrลกavati samo kada je datoteka glavni program.

Dakle, dok drugi jezici nameฤ‡u ulaznu toฤku main(), Python ostavlja vam izbor, nudeฤ‡i istu jasnoฤ‡u putem konvencije umjesto pravila kompajlera.

Pitanja i odgovori

__main__ je ime Python daje skriptu najviลกe razine, otkrivenu putem varijable __name__. main() je obiฤna korisniฤki definirana funkcija koja sadrลพi logiku vaลกeg programa. Rade zajedno, ali __main__ je naziv okruลพenja, dok je main() funkcija.

Postavljanje na kraju osigurava Python veฤ‡ je definirao svaku funkciju i klasu iznad prije nego ลกto blok pozove main(). Ranije pokretanje moglo bi referencirati imena koja joลก nisu definirana i izazvati NameError.

Ne. Python ne pridaje posebno znaฤenje nazivu main. Funkciju unosa moลพete nazvati kako god ลพelite, no imenovanje main() je snaลพna konvencija koja signalizira poฤetnu toฤku programa drugim programerima.

Da. Funkcija main() moลพe vratiti vrijednost, a uobiฤajeni obrazac zapisuje sys.exit(main()) tako da return postaje izlazni kod procesa. Vraฤ‡anje 0 signalizira uspjeh, dok vrijednost razliฤita od nule signalizira greลกku.

Bez guarda, main() se izvrลกava i kada se datoteka izvrลกava izravno i kada se uvozi. Drugi programi koji bi samo htjeli ponovno koristiti njegove funkcije izazvali bi neลพeljeno izvrลกavanje i nuspojave.

Tijelo funkcije main() mora biti uvuฤeno ispod linije def main():. Pisanje sljedeฤ‡e naredbe s poravnanjem ulijevo ostavlja funkciju bez uvuฤenog bloka, pa Python izaziva IndentationError. Dodajte konzistentne razmake ili tabulator.

GitHub Copilot automatski dovrลกava kostur def main() i zaลกtitu if __name__ == โ€œ__main__โ€ od kratkog komentara. Takoฤ‘er predlaลพe parsiranje argumenata i docstringove, omoguฤ‡ujuฤ‡i vam da se usredotoฤite na logiku programa umjesto na standardni tekst.

U projektima umjetne inteligencije i strojnog uฤenja, funkcija main() je ulazna toฤka za skripte za uฤenje ili zakljuฤivanje. ฤŒita hiperparametre iz argumenata naredbenog retka, omoguฤ‡uje uvoz usluลพnih programa za ponovnu upotrebu i olakลกava testiranje i automatizaciju eksperimenata.

Saลพmite ovu objavu uz: