Určite ste sa stretli s konštruktom if __name__ == "hlavný" v Pythone. Poznáte však jeho presný účel?
V niektorých programovacích jazykoch slúži hlavná metóda ako jediný vstupný bod pre vykonanie programu. Pri prechode z iných jazykov na Python sa idiom if __name__ == "__main__" môže sa zdať, že plní rovnakú úlohu. V Pythone to tak nie je.
The if __name__ == "__main__" idiom umožňuje spustenie špecifického kódu, keď súbor beží ako skript. Zabezpečuje tiež, že sa rovnaký kód nespustí, keď súbor importujete ako modul.
Pochopenie správania premennej __name__
The __názov__ premenná je zabudovaná do Pythonu. Predstavuje názov modulu alebo skriptu, v ktorom sa používa. Keď sa skript vykonáva ako hlavný program, jeho hodnota je nastavená na __Hlavná__. Ak importujete skript ako modul, hodnota premennej sa nastaví na skutočný názov modulu.
Na začiatku to môže byť mätúce, ale pozrite sa na nasledujúci príklad:
Vytvorte skript a pomenujte ho pozdravy.py. Tento skript bude obsahovať funkciu, ktorá pozdraví používateľa a vypíše hodnotu
__názov__ premenlivý. Používateľa tiež požiada, aby zadal svoje meno.defpozdraviť(názov):
vytlačiť (f" Dobrý deň, {názov}!")vytlačiť ("Hodnota __name__:", __názov__)
ak __meno__ == "__Hlavná__":
user_name = input("Prosím, zadajte vaše meno: ")
pozdraviť (user_name)
inak:
vytlačiť ("Modul "pozdravy" bol importovaný.")
Spustenie pozdravy.py skript zobrazí nasledujúci výstup:
Hodnota __názov__ variabilné výnosy ako __Hlavná__ pretože skript sa vykonáva priamo.
Teraz vytvorte ďalší skript a pomenujte ho script2.py. Potom importujte súbor pozdravujem skript ako modul.
importovať pozdravujemvytlačiť ("Prebieha spustenie skriptu pozdravov...")
pozdravujem.pozdravujem("Alice")
Volanie na pozdraviť funkcia z pozdrav modul poskytuje nasledujúci výstup.
Hodnota __názov__ premenná sa zmení na skutočný názov importovaného modulu. V tomto prípade, pozdravujem.
Táto hodnota je idiom if __name__ == "__main__" hľadá, aby zistil, či je súbor spustený ako skript alebo je importovaný ako modul.
Kedy použiť if __name__ == Konštrukt "__main__"?
Môžete pridať if __name__ == "__main__" vytvoriť v ľubovoľnom skripte. Existuje však niekoľko scenárov, v ktorých môže byť jeho použitie najvýhodnejšie. O týchto scenároch sa dozviete pomocou programu jednoduchej kalkulačky nižšie.
# calculator.py
defpridať(a, b):
vrátiť a + bdefodčítať(a, b):
vrátiť a - bdefmnožiť(a, b):
vrátiť a * bdefrozdeliť(a, b):
ak b != 0:
vrátiť a / b
inak:
vrátiť"Chyba: Delenie nulou!"ak __meno__ == "__Hlavná__":
vytlačiť ("Vitajte v kalkulačke!")
vytlačiť ("Vyberte operáciu:")
vytlačiť ("1. Pridať")
vytlačiť ("2. Odčítať")
vytlačiť ("3. Násobiť")
vytlačiť ("4. Rozdeliť")voľba = int (vstup("Zadajte svoj výber (1-4): "))
num1 = float (vstup("Zadajte prvé číslo: "))
num2 = float (vstup("Zadajte druhé číslo: "))
ak výber == 1:
výsledok = pridať (číslo1, číslo2)
vytlačiť (f"Súčet {num1} a {num2} je: {výsledok}")
elif výber == 2:
výsledok = odčítať (číslo1, číslo2)
vytlačiť (f"Rozdiel medzi {num1} a {num2} je: {výsledok}")
elif výber == 3:
výsledok = vynásobiť (číslo1, číslo2)
vytlačiť (f"Produkt z {num1} a {num2} je: {výsledok}")
elif výber == 4:
výsledok = deliť (číslo1, číslo2)
vytlačiť (f"Rozdelenie {num1} podľa {num2} je: {výsledok}")
inak:
vytlačiť ("Neplatná voľba!")
Prvý scenár je, keď chcete spustiť skript nezávisle a vykonať špecifické akcie. To umožňuje skriptu fungovať ako samostatný program. The if __name__ == "__main__" konstrukt umožňuje používateľom interagovať s kalkulačkou pomocou rozhrania príkazového riadku. To dáva používateľom možnosť používať funkcie programu bez toho, aby museli rozumieť alebo upravovať základný kód.
Stále je možné spustiť program bez if __name__ == "__main__" vytvoriť a dosiahnuť rovnaký výsledok, ale váš kód by stratil modulárnu organizáciu kódu.
Druhý scenár je, keď chcete svoje aby mal modulárny dizajn. To umožňuje iným programom importovať váš skript ako modul a používať jeho funkcie bez spúšťania nepotrebných funkcií.
V prípade programu kalkulačka môžu iné programy importovať kalkulačka modul bez spustenia rozhrania CLI a výziev na vstup používateľa. To zaisťuje opätovnú použiteľnosť kódu a modulárny dizajn. To umožňuje bezproblémovú integráciu kalkulačky do väčších aplikácií.
importovať kalkulačka
# Používanie funkcií z modulu kalkulačky
result_add = calculator.add(5, 3)
vytlačiť ("Výsledok pridania:", výsledok_pridať)
result_subtract = calculator.subtract(10, 4)
vytlačiť ("Výsledok odčítania:", výsledok_odčítať)
Tretí scenár je, keď chcete otestujte a odlaďte svoj skript Python nezávisle od akýchkoľvek iných modulov alebo skriptov, ktoré by ho mohli importovať. V príklade kalkulačky to uľahčuje zameranie sa na testovanie funkčnosti kalkulačky bez zásahu externého kódu.
importovať kalkulačka
# Testovanie funkcií kalkulačky
ak __meno__ == "__Hlavná__":
# Testovací doplnok
vysledok = calculator.add(5, 3)
vytlačiť ("Výsledok pridania:", výsledok)# Otestujte odčítanie
vysledok = calculator.subtract(8, 4)
vytlačiť ("Výsledok odčítania:", výsledok)
# Test násobenia
vysledok = calculator.multiply(2, 6)
vytlačiť ("Výsledok násobenia:", výsledok)
Vyššie uvedený kód ukazuje, ako nezávisle ladiť skript kalkulačky.
Kedy je zbytočné použiť if __name__ == "__main__" Construct?
Ako ste videli vo vyššie uvedených scenároch, použitie if __name__ == "__main__" konstrukt je odlíšiť skript, ktorý spúšťate ako hlavný program, a ten, ktorý importujete ako modul. Existujú však prípady, keď je použitie zbytočné.
Prvý prípad je, keď je váš skript jednoduchý a nemá žiadne opätovne použiteľné funkcie alebo moduly a nemáte v úmysle ho importovať. V tomto prípade by ste mali túto konštrukciu vynechať, pretože celý skript sa pri spustení spustí. Toto je bežné pre jednorazové skripty, ktoré plnia špecifický účel a nie sú určené na opätovné použitie alebo import.
Iný prípad je, keď pracujete v interaktívnej relácii Pythonu, napr. pri používaní notebooku Jupyter. V interaktívnej relácii zadávate a spúšťate kód priamo v príkazovom riadku alebo v interaktívnom prostredí Pythonu. Ako napríklad Python REPL (Read-Eval-Print Loop). To vám umožňuje experimentovať s kódom a testovať malé úryvky, čím získate okamžité výsledky.
V týchto interaktívnych prostrediach sa koncept skriptu spusteného ako hlavný program alebo importovaného ako modul neuplatňuje. Úryvky kódu spúšťate priamo bez potreby tradičného vstupného bodu skriptu.
Ako sa stanete majstrom v Pythone?
Aby ste sa stali majstrom v akomkoľvek programovacom jazyku, musíte pochopiť, ako fungujú základné koncepty funkcií alebo nástrojov. Rovnako ako ste sa dozvedeli o konštrukcii if __name__ == "__main__" v tomto článku.
Pochopenie základných pojmov vám pomôže presne vedieť, ako sa váš program bude správať, keď ich použijete. Nie je žiadny zhon, učenie sa pojmov jeden po druhom vám pomôže ponoriť sa hlbšie do každého z nich.