Site de référence: [Introduction à Python] Quel est l'important "if name == '__ main__':" lorsqu'il s'agit de modules?
Lorsque j'étudie Python et que je regarde des exemples de programmes, je vois souvent la phrase "if name == '__ main__':". Main est indispensable pour écrire des programmes dans d'autres langages de programmation tels que C et Java, mais dans le cas de Python, main n'est généralement pas utilisé lors du codage.
Cependant, cette phrase joue un rôle important dans le travail avec des modules en Python. Cette fois, je vais expliquer ce que signifie "si nom == '__ main__':".
Le code Python peut être enregistré en tant que fichier de script et réutilisé par d'autres programmes. Ce fichier s'appelle un module. "Importer" est utilisé lors du chargement d'une bibliothèque standard en Python, mais en chargeant un module que vous avez créé à l'aide de l'importation, vous pouvez également utiliser les fonctions et les classes définies dans ce module dans d'autres programmes.
Maintenant que vous savez ce que signifie le module, parlons de la variable "name". À titre d'exemple, supposons que vous ayez le programme test.py suivant.
test.py
def test():
print('Hello World!')
if __name__ == '__main__':
test()
Le résultat de l'exécution de ce programme est le suivant.
Hello World!
Dans cet exemple, nous venons de définir une fonction appelée test qui affiche "Hello World!". Je n'ai déclaré nulle part la variable "name". Néanmoins, le fait que test () soit exécuté signifie que l'instruction if renvoie True. Que veut dire ceci exactement?
Regardons d'abord cette variable appelée "name". En fait, cette variable name est créée automatiquement lorsque vous chargez un script Python sur une imprimante Python. De plus, le nom du module du script en cours d'exécution lui est automatiquement attribué.
J'ai trouvé qu'une variable appelée name était créée automatiquement et que le nom du module du script en cours d'exécution était automatiquement attribué. Cependant, je ne me souviens pas d'avoir créé un module appelé main. D'où vient ce main?
En fait, lorsque vous exécutez directement un script Python, le fichier de script est reconnu comme un module nommé «main». Par conséquent, si vous exécutez directement le fichier de script, la valeur main sera automatiquement affectée à la variable name.
En d'autres termes, la signification de "if name == '__ main__':" était "exécutée uniquement lorsqu'elle est exécutée directement, et non exécutée autrement". Dans l'exemple précédent, nous avons exécuté test.py directement, donc l'instruction if a renvoyé True et test () a été exécuté.
En guise de test, j'ai ajouté un processus pour afficher le nom du module exécuté dans test.py.
def test():
print('Hello World!')
if __name__ == '__main__':
test()
print('Nom du module:{}'.format(__name__)) #Afficher le nom du module exécuté
Si vous faites cela, vous obtiendrez les résultats suivants:
Hello World! Nom du module: main
Lorsque vous exécutez directement le fichier de script, vous pouvez voir que le nom du module est "main".
Alors, que signifie «sauf lorsque exécuté directement»? C'est à ce moment que ce fichier de script est lu en tant que module à partir d'un autre programme. J'ai créé test2.py qui importe test.py en tant que module.
test2.py
import test #test.Importer py
Résultat d'exécution
Nom du module: test
Si vous importez et exécutez test.py, vous verrez que le nom du module est "test". Autrement dit, test.py est exécuté en tant que module de test, donc name se voit attribuer "test". Par conséquent, "if name == '__ main__':" renvoie False, donc test () n'a pas été exécuté.
"If name == '__ main__':" est utilisé pour tester lors de la création d'un module, ou lorsque vous n'avez pas l'intention de modulariser pour le moment mais que vous voulez éviter les traitements inutiles lors de la modularisation. Vous ne pensez peut-être pas à la modularisation ou à la réutilisation pendant que vous créez un programme par vous-même, mais c'est une idée essentielle lorsque vous créez un programme à grande échelle. Souvenons-nous-en.