[Python] La matrice immortale.

Giovanni Porcari giovanni.porcari a softwell.it
Mar 1 Lug 2014 18:15:42 CEST


> Il giorno 01/lug/2014, alle ore 15:37, Gabriele Battaglia <iz4apu a libero.it> ha scritto:
> 
> Ciao Giovanni e grazie.
> Visto che in questi giorni, data la mia presenza, questa lista è diventata un asilo per programmatori... Dove l'infante sono io, chiaramente, mi spiegheresti il significato di questa riga?
> 
> if __name__=='__main__':
> 
> Faccio qualche domanda per capire, correggimi.
> __name__ è l'atributo di che cosa? Assume  "__main__" quando ci si trova in console? Che altri valori potrebbe avere? Perchè istanzi degli oggetti della tua classe, solo se __name__ è = a __main__?
> 
> GB. 


L'idea è che se scrivi un programma in linea di massima parti da un'idea
e poi ti lasci guidare dall'intelligenza, dall'iniziativa e dalla tua
voglia di sperimentare. Se ami pensare in grande il fatto di avere 
una classe Scacchiera ti consente di avere più istanze di Scacchiera
e un domani di gestire in contemporanea un torneo con tante scacchiere.

Un domani scriverai un codice bellissimo per gestire tornei e scriverai

"from scacchi import Scacchiera"

e poi instanzierai tante scacchiere quanti sono i tavoli e farai un grande
programma. Oppure butterai via subito tutto.

Ma il punto è che quando scrivi Scacchiera non hai ancora nulla di pronto
per testarla e quindi subentra il 'trucco' if __name__='__main__':

Questo ti consente da terminale di scrivere python scacchi.py
(dove scacchi.py è il nome del modulo).

Quando il programma va in esecuzione vengono eseguite tutte le istruzione 
non indentate e quindi anche la famigerata "if __name__".
Se tu lanci il modulo scacchi da terminale allora il suo nome è "__main__" 
e quindi vengono eseguite le istruzione che sono comprese in questa if.

In pratica sotto la if ci finisce un main provvisorio di test della tua classe.

E perchè ci mettiamo la 'if' ?

Perchè poi nel modulo torneo.py dove importerai scacchi.py , al momento
di importare vengono eseguite tutte le istruzioni non indentate e quindi anche 
la famosa 'if'. Però in questo caso (per nostra fortuna) __name__ non vale __main__
e quindi la if non viene eseguita.

Sono certo che su questa lista ci siano mille persone più brave di me a spiegartelo
ma nel caso non ci fossero volontari ho fatto del mio meglio ;)


Ciao 

G




Maggiori informazioni sulla lista Python