Il significato di if __name__ == ‘__main__’ in Python qual è? A che cosa serve e come funziona? È quello che scoprirai leggendo questo articolo.
Questa riga di codice in Python, ovvero if __name__ == ‘__main__’ ha un significato abbastanza lineare, è la grammatica è la non-chiarezza che di primo acchito ci frega 😀
All’inizio può spaventare, visto che sono parecchio tecnichesi le variabili utilizzate in questa semplice riga di codice!
Ma prima di introdurti all’argomento, permettimi di presentarmi.
Il mio nome è Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
Prima di addentrarci nel significato di if __name__ == ‘__main__’ parliamo un attimo dell’interprete di Python.
Quando legge un file che contiene del codice Python, fa due cose molto semplici:
- Imposta alcune variabili speciali, tra queste c’è __name__
- Esegue tutto il codice presente nel file
La variabile __name__ in Python: la prima parte di if __name__ == ‘__main__’
Facciamo un esempio concreto che ti aiuti a capire.
Questo è il codice all’interno del file “codice.py”:
print(“scrivo prima di importare”)
import time
print(“scrivo prima della funzione ciao”)
def ciao():
print(“ciao”)
print(“scrivo prima della funzione tempo”)
def tempo():
print(time.localtime(123456789))
print(“scrivo prima di __name__”)
if __name__==’__main__’:
ciao()
tempo()
Variabili speciali
Quando l’interprete di Python legge un file sorgente, definisce prima di tutto delle variabili speciali. In questo caso, la nostra variabile speciale è __name__.
Esecuzione come programma principale
Se stai eseguendo lo script “codice.py” come programma principale (quindi lo apri e lo esegui direttamente), l’interprete assegna la stringa ‘__main__’ alla variabile __name__.
Script importato come modulo
Diversamente, immagina che qualcuno stia usando il tuo script, ma lo vuole importare come modulo nel suo stesso programma, per intenderci:
import miocodice
Quello che farà l’interprete è cercare innanzitutto il tuo file, assegnerà il nome “miocodice” alla variabile __name__.
Arrivati a questo punto, il significato di if __name__ == “__main__” va visto sotto un’ultima prospettiva.
Il significato di if __name__ == “__main__”: cosa succede con l’esecuzione
Una volta che le variabili speciali sono state impostate, l’interprete eseguirà tutto il codice nel modulo, una riga per volta.
Cosa succede un passo per volta
- Stampa la stringa “prima di importare”
- Carica il modulo “time” e lo assegna alla variabile chiamata time.
Ciò che succede è questo:
time = __import__(“time”) - Stampa la stringa “scrivo prima della funzione ciao”
- Esegue la prima funzione che abbiamo scritto e crea la variabile “ciao()” a cui sarà assegnato il codice della funzione stessa
- Stampa la stringa “scrivo prima della funzione tempo”
- Succede la stessa cosa del punto 4, ma questa volta la variabile è “tempo()”
- Stampa la stringa “scrivo prima di __name__”
8. A questo punto succede questo se il tuo modulo è eseguito come programma principale
La variabile __name__ sarà impostata con il valore “__main__” ed eseguire le due funzioni che abbiamo scritto prima, quindi vedremo a video “ciao” e il valore restituito da “time.localtime(123456789)”
8. Oppure succede questo se il tuo modulo è importato in un altro programma
La variabile __name__ sarà valorizzata con “miocodice” e il contenuto che segue if __name__ == ‘__main__’ significato non verrà eseguito, sarà saltato a piè pari!