Cosa è if __name__ == “__main__” e perché si usa

Per chi programma in Python, potrà vedere all’interno di molti codici, soprattutto nella parte finale, il seguente costrutto:

 if __name__ == "__main__":  

seguito poi da una serie di istruzioni racchiuse nell’indentazione. A cosa serve? Perchè è tanto comune?

Cosa è if __name__ __main__ e perchè si usa

Prima di eseguire il codice, l’interprete Python legge il codice sorgente e definisce alcune variabili globali speciali, tra cui la variabile __name__ a cui viene assegnato il nome del modulo principale in esecuzione. Un modulo è un file contenente definizioni e dichiarazioni in Python. Il nome del file è il nome del modulo senza il suffisso .py.

Se l’interprete sta eseguendo quel modulo come programma principale (main), imposterà la variabile special __name__  ad avere un valore __main__. Se invece questo file viene importato da un altro modulo, allora __name__ verrà impostata con il nome del modulo.

Esempio

Vediamo un esempio diretto per comprendere al meglio la cosa. Scrivete il codice sottostante e salvatelo come aModule.py

print("This part is always executed")

if __name__ == "__main__": 
    print("This part is executed when this file is invoked directly.")
 else: 
    print("This part is executed when this file is imported as module.") 

Adesso vediamo come possiamo invocarli nei due casi.

$>python amodule.py

E nel secondo caso scrivete il codice sottostante e salvatelo come importModule.py

import aModule

print("done") 

Conclusioni

Come potete vedere nei due casi il comportamento è completamente diverso. Infatti, abbiamo definito un file .py come un “modulo“. Questo perché nel file abbiamo una parte del codice come classi e funzioni, che generalmente vengono sviluppate per essere riutilizzate altrove. Quindi con il costrutto visto nell’articolo è possibile utilizzare, o riutilizzare altrove, differenziandone il comportamento. Lasciando nel “main” locale, una parte dell’implementazione valida solo nel contesto del file visto da solo e non come modulo.

Lascia un commento