Trebuie să fi întâlnit construcția if __name__ == „principală” în Python. Dar știi scopul lui exact?

În unele limbaje de programare, metoda principală servește ca unic punct de intrare pentru execuția unui program. În timpul tranziției de la alte limbi la Python, expresia if __name__ == "__main__" poate părea că îndeplinește aceeași sarcină. În Python, acesta nu este cazul.

The if __name__ == "__main__" idiom permite executarea unui anumit cod atunci când fișierul rulează ca script. De asemenea, se asigură că același cod nu se execută atunci când importați fișierul ca modul.

Înțelegerea comportamentului variabilei __name__

The __Nume__ variabila este construită în Python. Reprezintă numele modulului sau al scriptului în care este utilizat. Când un script se execută ca program principal, valoarea lui este setată la __principal__. Dacă importați scriptul ca modul, valoarea variabilei este setată la numele real al modulului.

Acest lucru ar putea fi confuz la început, dar aruncați o privire la următorul exemplu:

instagram viewer

Creați un script și denumiți-l salutări.py. Acest script va conține o funcție care salută un utilizator și imprimă valoarea lui __Nume__ variabil. De asemenea, va cere utilizatorului să-și introducă numele.

defsalut(Nume):
imprimare(f"Bună ziua, {Nume}!")

imprimare(„Valoarea __nume__:”, __Nume__)

dacă __nume__ == "__principal__":
user_name = input("Te rog scrieti numele: ")
salut (nume_utilizator)
altfel:
imprimare(„Modulul „salutări” a fost importat.”)

Rularea salutări.py scriptul va afișa următoarea ieșire:

Valoarea __Nume__ variabila returneaza ca __principal__ deoarece scriptul se execută direct.

Acum creați un alt script și denumiți-l script2.py. Apoi, importați Salutari scriptul ca modul.

import Salutari

imprimare(„Se execută scriptul de salutare...”)
salutări. salut("Alice")

Apelând la salut funcția de la Salut modulul oferă următoarea ieșire.

Valoarea __Nume__ variabila se modifică la numele actual al modulului importat. În acest caz, Salutari.

Această valoare este ceea ce idiom if __name__ == "__main__" caută pentru a determina dacă un fișier rulează ca script sau este importat ca modul.

Când să utilizați constructul if __name__ == „__main__”?

Puteți adăuga if __name__ == "__main__" construi în orice script. Dar există câteva scenarii în care utilizarea acestuia poate fi cea mai benefică. Veți afla despre aceste scenarii folosind programul de calculator simplu de mai jos.

# calculator.py

defadăuga(a, b):
întoarcere a + b

defscădea(a, b):
întoarcere a - b

defmultiplica(a, b):
întoarcere a * b

defdivide(a, b):
dacă b != 0:
întoarcere a/b
altfel:
întoarcere„Eroare: Împărțire cu zero!”

dacă __nume__ == "__principal__":
imprimare(„Bine ați venit la Calculator!”)
imprimare(„Selectați o operație:”)
imprimare("1. Adăuga")
imprimare("2. Scădea")
imprimare("3. Multiplica")
imprimare("4. Divide")

alegere = int (input("Introduceți alegerea dvs. (1-4): "))

num1 = float (input("Introduceți primul număr: "))
num2 = float (input("Introduceți al doilea număr: "))

dacă alegere == 1:
rezultat = adăugați (num1, num2)
imprimare(f"Suma de {num1} și {num2} este: {rezultat}")
elif alegere == 2:
rezultat = scade (num1, num2)
imprimare(f"Diferenta dintre {num1} și {num2} este: {rezultat}")
elif alegere == 3:
rezultat = înmulțire (num1, num2)
imprimare(f"Produsul lui {num1} și {num2} este: {rezultat}")
elif alegere == 4:
rezultat = împărțire (num1, num2)
imprimare(f"Diviziunea a {num1} de {num2} este: {rezultat}")
altfel:
imprimare(„Alegere nevalidă!”)

Primul scenariu este atunci când doriți să rulați un script independent și să efectuați anumite acțiuni. Acest lucru permite script-ului să funcționeze ca un program independent. The if __name__ == "__main__" construct permite utilizatorilor să interacționeze cu calculatorul folosind interfața de linie de comandă. Acest lucru oferă utilizatorilor posibilitatea de a utiliza funcționalitatea programului fără a fi nevoiți să înțeleagă sau să modifice codul de bază.

Este încă posibil să rulați programul fără if __name__ == "__main__" construiți și obțineți același rezultat, dar codul dvs. ar pierde organizarea modulară a codului.

Al doilea scenariu este când îți dorești cod pentru a avea un design modular. Acest lucru permite altor programe să vă importe scriptul ca modul și să-și utilizeze funcțiile fără a declanșa funcționalități inutile.

În cazul programului calculatorului, alte programe pot importa calculator modul fără a declanșa interfața CLI și solicitările de introducere a utilizatorului. Acest lucru asigură reutilizarea codului și design modular. Prin urmare, permițând calculatorului să fie integrat perfect în aplicații mai mari.

import calculator

# Utilizarea funcțiilor din modulul calculatorului
rezultat_add = calculator.add(5, 3)
imprimare(„Rezultatul adăugării:”, rezultat_add)

rezultat_subtract = calculator.subtract(10, 4)
imprimare(„Rezultatul scăderii:”, rezultat_scădere)

Al treilea scenariu este atunci când vrei testați și depanați scriptul dvs. Python independent de orice alte module sau scripturi care l-ar putea importa. În exemplul calculatorului, este mai ușor să vă concentrați pe testarea funcționalității calculatorului fără interferențe din partea codului extern.

import calculator

# Testarea funcțiilor calculatorului
dacă __nume__ == "__principal__":
# Testare adăugare
rezultat = calculator.add(5, 3)
imprimare(„Rezultatul adăugării:”, rezultat)

# Testează scăderea
rezultat = calculator.subtract(8, 4)
imprimare(„Rezultatul scăderii:”, rezultat)

# Testează înmulțirea
rezultat = calculator.multiply(2, 6)
imprimare(„Rezultatul înmulțirii:”, rezultat)

Codul de mai sus demonstrează cum să depanați independent scriptul calculatorului.

Când nu este necesar să folosiți constructul if __name__ == „__main__”?

După cum ați văzut în scenariile de mai sus, utilizarea if __name__ == "__main__" construct este de a diferenția scriptul pe care îl rulați ca program principal și cel pe care îl importați ca modul. Există totuși unele cazuri în care utilizarea acestuia este inutilă.

Primul caz este atunci când scriptul dumneavoastră este simplu și nu are funcții sau module reutilizabile și nu intenționați să îl importați. În acest caz, ar trebui să omiteți această construcție deoarece întregul script se execută atunci când este rulat. Acest lucru este obișnuit pentru scripturile unice care îndeplinesc un scop specific și nu sunt destinate reutilizarii sau importului.

Celălalt caz este atunci când lucrați într-o sesiune interactivă Python, de ex. când utilizați Jupyter Notebook. Într-o sesiune interactivă, tastați și executați cod direct în promptul de comandă sau într-un shell Python interactiv. Cum ar fi Python REPL (Read-Eval-Print Loop). Acest lucru vă permite să experimentați cu codul și să testați fragmente mici, oferindu-vă rezultate imediate.

În aceste medii interactive, conceptul de script care rulează ca program principal sau importat ca modul nu se aplică. Execuți direct fragmente de cod fără a fi nevoie de un punct de intrare tradițional pentru script.

Cum devii maestru în Python?

Pentru a deveni un maestru în orice limbaj de programare, trebuie să înțelegeți cum funcționează conceptele de bază ale funcțiilor sau instrumentelor. Așa cum ați învățat despre construcția if __name__ == „__main__” în acest articol.

Înțelegerea conceptelor de bază vă va ajuta să știți exact cum se va comporta programul dvs. atunci când le utilizați. Nu există nicio grabă, învățarea conceptelor pe rând vă va ajuta să vă scufundați mai adânc în fiecare dintre ele.