Du må have stødt på if __name__ == "main" konstruktionen i Python. Men kender du dets præcise formål?
I nogle programmeringssprog fungerer hovedmetoden som det eneste indgangspunkt for udførelse af et program. Mens overgangen fra andre sprog til Python, formsproget hvis __navn__ == "__main__" kan se ud til at udføre den samme opgave. I Python er dette ikke tilfældet.
Det hvis __navn__ == "__main__" formsprog tillader en bestemt kode at udføre, når filen kører som et script. Det sikrer også, at den samme kode ikke udføres, når du importerer filen som et modul.
Forståelse af __navn__ Variable Behavior
Det __navn__ variabel er indbygget i Python. Det repræsenterer navnet på modulet eller scriptet, som det bruges i. Når et script udføres som hovedprogram, er dets værdi sat til __hoved__. Hvis du importerer scriptet som et modul, sættes variablens værdi til det faktiske navn på modulet.
Dette kan være forvirrende i starten, men tag et kig på følgende eksempel:
Opret et script og navngiv det hilsen.py
. Dette script vil indeholde en funktion, der byder en bruger velkommen og udskriver værdien af __navn__ variabel. Det vil også bede brugeren om at indtaste deres navn.defhilse(navn):
Print(f"Hej, {navn}!")Print("Værdi af __navn__:", __navn__)
hvis __navn__ == "__main__":
brugernavn = input("Vær sød at skrive dit navn: ")
hilse (brugernavn)
andet:
Print("Modulet 'hilsen' er blevet importeret.")
Kører hilsen.py script vil vise følgende output:
Værdien af __navn__ variable afkast som __hoved__ fordi scriptet kører direkte.
Opret nu et andet script og navngiv det script2.py. Importer derefter Vær hilset script som et modul.
importere Vær hilsetPrint("Udfører hilsen-scriptet...")
hilsener.hilsen("Alice")
Ringer til hilse funktion fra hilsen modul giver følgende output.
Værdien af __navn__ variable ændringer til det faktiske navn på det importerede modul. I dette tilfælde, Vær hilset.
Denne værdi er, hvad formsproget hvis __navn__ == "__main__" søger for at afgøre, om en fil kører som et script eller er importeret som et modul.
Hvornår skal man bruge if __name__ == "__main__"-konstruktionen?
Du kan tilføje hvis __navn__ == "__main__" konstruere i ethvert script. Men der er nogle scenarier, hvor det kan være mest fordelagtigt at bruge det. Du vil lære om disse scenarier ved hjælp af det enkle regneprogram nedenfor.
# lommeregner.py
deftilføje(a, b):
Vend tilbage a + bdeftrække fra(a, b):
Vend tilbage a - bdefformere sig(a, b):
Vend tilbage a * bdefdele(a, b):
hvis b != 0:
Vend tilbage a/b
andet:
Vend tilbage"Fejl: division med nul!"hvis __navn__ == "__main__":
Print("Velkommen til Lommeregneren!")
Print("Vælg en handling:")
Print("1. Tilføje")
Print("2. Trække fra")
Print("3. Formere sig")
Print("4. Dele")valg = int (input("Indtast dit valg (1-4): "))
num1 = float (input("Indtast det første tal: "))
num2 = float (input("Indtast det andet tal: "))
hvis valg == 1:
resultat = tilføje (tal1, tal2)
Print(f "Summen af {num1} og {num2} er: {resultat}")
elif valg == 2:
resultat = trække fra (tal1, tal2)
Print(f "Forskellen mellem {num1} og {num2} er: {resultat}")
elif valg == 3:
resultat = gange (tal1, tal2)
Print(f "Produktet af {num1} og {num2} er: {resultat}")
elif valg == 4:
resultat = dividere (tal1, tal2)
Print(f"Opdelingen af {num1} ved {num2} er: {resultat}")
andet:
Print("Ugyldigt valg!")
Det første scenarie er, når du vil køre et script uafhængigt og udføre specifikke handlinger. Dette gør det muligt for scriptet at fungere som et selvstændigt program. Det hvis __navn__ == "__main__" konstruktion giver brugerne mulighed for at interagere med lommeregneren ved hjælp af kommandolinjegrænsefladen. Dette giver brugerne mulighed for at bruge programmets funktionalitet uden at skulle forstå eller ændre den underliggende kode.
Det er stadig muligt at køre programmet uden hvis __navn__ == "__main__" konstruere og opnå det samme resultat, men din kode ville miste modulær kodeorganisation.
Det andet scenarie er, når du vil have din kode for at have et modulært design. Dette giver andre programmer mulighed for at importere dit script som et modul og bruge dets funktioner uden at udløse unødvendige funktionaliteter.
I tilfælde af lommeregnerprogrammet kan andre programmer importere lommeregner modul uden at udløse CLI-grænsefladen og brugerinputprompter. Dette sikrer kodegenanvendelighed og modulært design. Derfor gør det muligt for lommeregneren at blive integreret problemfrit i større applikationer.
importere lommeregner
# Brug af funktionerne fra lommeregnermodulet
resultat_add = lommeregner.add(5, 3)
Print("Tilføjelsesresultat:", resultat_tilføj)
result_subtract = calculator.subtract(10, 4)
Print("Subtraktionsresultat:", resultat_fratrække)
Det tredje scenarie er, når du vil test og fejlfind dit Python-script uafhængigt af andre moduler eller scripts, der kan importere det. I lommeregnereksemplet gør det det nemmere at fokusere på at teste lommeregnerens funktionalitet uden forstyrrelser fra ekstern kode.
importere lommeregner
# Test af lommeregnerens funktioner
hvis __navn__ == "__main__":
# Testtilsætning
resultat = calculator.add(5, 3)
Print("Tilføjelsesresultat:", resultat)# Test subtraktion
resultat = calculator.subtract(8, 4)
Print("Subtraktionsresultat:", resultat)
# Test multiplikation
resultat = calculator.multiply(2, 6)
Print("Multiplikationsresultat:", resultat)
Ovenstående kode viser, hvordan man uafhængigt fejlretter regnemaskinens script.
Hvornår er det unødvendigt at bruge if __name__ == "__main__"-konstruktionen?
Som du har set i scenarierne ovenfor, er brugen af hvis __navn__ == "__main__" konstruktion er at skelne mellem det script, du kører som hovedprogram, og det, du importerer som et modul. Der er dog nogle tilfælde, hvor det er unødvendigt at bruge det.
Det første tilfælde er, når dit script er enkelt og ikke har nogen genbrugelige funktioner eller moduler, og du ikke har til hensigt at importere det. I dette tilfælde bør du udelade denne konstruktion, da hele scriptet køres, når det køres. Dette er almindeligt for engangsscripts, der udfører et bestemt formål og ikke er beregnet til genbrug eller import.
Det andet tilfælde er, når du arbejder i en interaktiv Python-session, f.eks. når du bruger Jupyter Notebook. I en interaktiv session skriver og udfører du kode direkte i kommandoprompten eller i en interaktiv Python-shell. Såsom Python REPL (Read-Eval-Print Loop). Dette giver dig mulighed for at eksperimentere med kode og teste små uddrag, hvilket giver dig øjeblikkelige resultater.
I disse interaktive miljøer gælder konceptet med et script, der kører som hovedprogram eller importeret som et modul, ikke. Du udfører kodestykker direkte uden behov for et traditionelt script-indgangspunkt.
Hvordan bliver du en mester i Python?
For at blive en mester i et hvilket som helst programmeringssprog skal du forstå, hvordan de underliggende koncepter for funktionerne eller værktøjerne fungerer. Ligesom du lærte om if __name__ == "__main__"-konstruktionen i denne artikel.
At forstå de underliggende begreber vil hjælpe dig med at vide præcis, hvordan dit program vil opføre sig, når du bruger dem. Det haster ikke, at lære begreberne ét ad gangen vil hjælpe dig med at dykke dybere ned i hver enkelt af dem.