if __name__ == “__main__”: Cosa fa?

di Lorenzo Neri
0 commento 187 visualizzazioni

Se stai muovendo i tuoi primi passi in Python, non potrà esserti sfuggita questa riga di codice.

All’inizio può spaventare, visto che sono parecchio tecnichesi le variabili utilizzate in questa semplice riga di codice!

Parliamo un attimo dell’interprete di Python.

Quando legge un file che contiene del codice Python, fa due cose molto semplici:

  1. Imposta alcune variabili speciali, tra queste c’è __name__
  2. Esegue tutto il codice presente nel file

Che cos’è la variabile __name__ in Python

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__.

Esecuzione del codice

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

  1. Stampa la stringa “prima di importare”
  2. Carica il modulo “time” e lo assegna alla variabile chiamata time.

    Ciò che succede è questo:

    time = __import__(“time”)

  3. Stampa la stringa “scrivo prima della funzione ciao”
  4. Esegue la prima funzione che abbiamo scritto e crea la variabile “ciao()” a cui sarà assegnato il codice della funzione stessa
  5. Stampa la stringa “scrivo prima della funzione tempo”
  6. Succede la stessa cosa del punto 4, ma questa volta la variabile è “tempo()”
  7. 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__’ non verrà eseguito, sarà saltato a piè pari!

Potrebbero interessarti

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più