Python: if __name__ == ‘__main__’ — Algajate juhend

1. Sissejuhatus

Konstruktsioon if name == ‘main, mida sageli näeb Pythoni programmides, on oluline funktsioon, mis määrab, kuidas skript käivitati. Selle konstruktsiooni kasutades võib sama kood käituda erinevalt, sõltuvalt sellest, kas see on otse käivitatud või teise skripti kaudu imporditud.
Õigesti mõistes seda omadust, saate parandada koodi taaskasutatavust ja hooldatavust ning võimaldada tõhusamat silumist ja testimist. Selles artiklis selgitame üksikasjalikult selle konstruktsiooni rolli, kasutamist ja eeliseid, koos konkreetsete koodinäidetega.

2. Põhialused Pythoni name ja main kohta

Mis on Pythoni erimuutuja name?

Kui Pythoni programm käivitatakse, luuakse automaatselt mitu erimuutujat. __name__ on üks neist ja salvestab käivitatava faili (mooduli) nime. Tavaliselt näitab __name__ muutujas, millisest moodulist programm käivitati.

Märkus: Mooduli ja skripti erinevus
Moodul: Fail, mis sisaldab Pythoni koodi, mille eesmärk on olla imporditud ja kasutatud teiste failide poolt.
Skript: Pythoni fail, mis on mõeldud käivitamiseks programmina, tavaliselt ei impordita seda teistest failidest, vaid käivitatakse otse.

Näide: name käitumine

Näiteks kujutage ette faili example.py järgmise sisuga.

# example.py
print(__name__)

Kui käivitate selle faili otse, muutub __name__ väärtuseks '__main__' ja terminal kuvab järgmist:

__main__

Teisest küljest, kui fail imporditakse teisest failist, seatakse __name__ väärtuseks faili nimi 'example', mitte __main__. See näitab, et __name__ väärtus sõltub sellest, kuidas skript käivitatakse.

Mis on main?

Pythoni tõlgendaja määrab käivitatavale failile erilise nime __main__. See võimaldab Pythoni programmil kontrollida, kas skript käivitatakse otse, kontrollides __main__ väärtust.

3. Praktikaline kasutamine: if __name__ == '__main__'

Konstruktsiooni if name == ‘main kasutamine võimaldab käivitada spetsiifilist koodi ainult siis, kui Pythoni skript käivitatakse otse. See konstruktsioon on väga kasulik, et saada parem kontroll koodi käitumise üle.

Põhisüntaks

if __name__ == '__main__':
    # Code that runs only when the script is executed directly
    print("This script is being run directly.")

Konkreetne näide

Allpool on kood, mis kasutab faili calculate.py näitena. See fail sisaldab funktsiooni ja tingimuslauset.

# calculate.py
def add(a, b):
    return a + b

if __name__ == '__main__':
    result = add(3, 4)
    print("Calculation result:", result)

Käivitustulemus

Kui käivitate selle faili otse, annab see järgmise väljundi.

Calculation result: 7

Teisest küljest, kui see calculate moodul imporditakse teisest failist, ei käivitu kood, mis asub if __name__ == '__main__' all. Allpool on näide impordist ja kasutamisest teisest failist, main_script.py.

# main_script.py
import calculate

# When imported, the code under if __name__ == '__main__' in calculate.py is not executed
print(calculate.add(10, 5))  # 15 is printed

Nagu näha, võimaldab if name == ‘main konstruktsioon muuta skripti käitumist sõltuvalt sellest, kas see käivitatakse otse või imporditakse teise skripti poolt.

4. Selle konstruktsiooni kasutamise eelised

1. Parandatud mooduli taaskasutatavus

Kasutades if name == ‘main, suurendate mooduli taaskasutatavust. See takistab tarbetu koodi käivitamist, kui moodul imporditakse, ja võimaldab kontrollida, et ainult vajalikud osad käivitatakse, mis parandab koodi hooldatavust.

2. Lihtsam testimine

Asetades test- või silumiskoodi if name == ‘main sisse, saate arendamise ajal hõlpsasti teste käivitada. Kuna testikood ei käivitu, kui moodul imporditakse, saate tõhusamalt siluda.

Näite testkood

Lisame lihtsa testi calculate.py‑le.

# calculate.py
def add(a, b):
    return a + b

if __name__ == '__main__':
    # Test code
    print("3 + 4 =", add(3, 4))
    print("10 + 5 =", add(10, 5))

Sel viisil, kui lihtsad testid käivitatakse ainult siis, kui moodulit käivitatakse otse, ei käivitu testid, kui moodulit imporditakse teise koodi poolt, ning kasutatakse ainult vajalikke funktsioone.

RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. Ettevaatusabinõud ja parimad tavad

Ettevaatusabinõud

  1. Paranda koodi selgust if __name__ == '__main__' Aseta test- ja käivituskood selle punkti alla, et selgelt eraldada faili vastutusalad. Veendu, et osad, mida ei tohiks importimisel käivitada, on tingimuslause sees, et vältida soovimatut koodi käivitumist.
  2. Ole ettevaatlik ringimportidega Kui mitu faili impordivad üksteist koodis, kasutades if __name__ == '__main__', ole ettevaatlik ringimportide vältimiseks. Kompleksed moodulide sõltuvused suurendavad ringimportide riski, seega püüa hoida sõltuvused lihtsana.

Parimad tavad

  1. Aseta testkood põhiplokki Asetades testkoodi if __name__ == '__main__' sisse, väldid tarbetut käivitamist, kui moodulit imporditakse teise koodi poolt. Tagades, et testid käivitatakse ainult siis, kui moodulit käivitatakse otse, väldid soovimatuid käitumisi.
  2. Grupeeri seotud funktsioonid kokku Grupeerides seotud funktsioonid if __name__ == '__main__' sees ja kutsudes neid vajadusel, jääb sinu kood lühikeseks, kergemini loetavaks ja lihtsamini hooldatavaks.

6. Kokkuvõte

“if name == ‘main‘” konstruktsioon on mugav viis kindlaks teha, kuidas Python skript käivitati. Selle konstruktsiooni kasutades saad kindlustada, et kood käivitub ainult siis, kui skript käivitatakse otse, parandades mooduli taaskasutatavust ja muutes testimise lihtsamaks.
Programmeerides Pythonis, kasuta seda konstruktsiooni tõhusalt ning eralda skriptid ja moodulid õigesti, et parandada koodi hooldatavust ja taaskasutatavust.