Introduction
En Python, __main__ est le nom de la portée où le code de niveau supérieur s'exécute. Lorsqu'un fichier Python est exécuté directement depuis la ligne de commande, sa variable intégrée spéciale __name__ est définie sur la chaîne de caractères "__main__". Cependant, lorsque le fichier est importé comme module dans un autre script, son __name__ est défini sur son propre nom de fichier.
Ce comportement permet une idiome courante et puissante : exécuter conditionnellement un bloc de code uniquement lorsque le fichier est exécuté comme programme principal. Ceci est réalisé avec l'instruction if __name__ == "__main__":.
Dans ce laboratoire, vous apprendrez à utiliser ce bloc conditionnel pour rendre vos fichiers Python plus polyvalents, leur permettant de fonctionner à la fois comme scripts autonomes et comme modules réutilisables.
Comprendre la Portée Principale
Dans cette étape, vous apprendrez ce qu'est la portée __main__ et verrez comment la variable __name__ d'un module change en fonction de la manière dont il est exécuté.
Tout d'abord, créons un module Python simple et inspectons sa variable __name__.
Note: Si vous n'êtes pas familier avec l'utilisation de WebIDE (similaire à VS Code), veuillez vous familiariser avec cela dans ce lab.
- Ouvrez le fichier
my_module.pydepuis l'explorateur de fichiers à gauche. - Ajoutez le code suivant dans
my_module.py. Ce code définit une fonction puis affiche la valeur de la variable__name__.
## my_module.py
def greet(name):
print(f"Hello, {name}!")
print(f"The __name__ of my_module.py is: {__name__}")
## This block checks if the script is being run directly
if __name__ == "__main__":
print("my_module.py is being run directly.")
greet("World")
Maintenant, exécutons ce fichier directement en tant que script. Ouvrez le terminal et exécutez la commande suivante :
python3 my_module.py
Vous verrez la sortie suivante. Remarquez que __name__ est égal à "__main__", donc le code à l'intérieur du bloc if est exécuté.
The __name__ of my_module.py is: __main__
my_module.py is being run directly.
Hello, World!
Ensuite, voyons ce qui se passe lorsque nous importons my_module.py dans un autre script.
- Ouvrez le fichier
main.py. - Ajoutez le code suivant, qui importe
my_moduleet appelle sa fonctiongreet.
## main.py
import my_module
print("Running main.py")
my_module.greet("LabEx")
Exécutez maintenant main.py depuis le terminal :
python3 main.py
Observez attentivement la sortie :
The __name__ of my_module.py is: my_module
Running main.py
Hello, LabEx!
Lorsque main.py importe my_module.py, l'interpréteur Python exécute le code dans my_module.py. Cette fois, sa variable __name__ est définie sur "my_module" (le nom du fichier module). Comme __name__ n'est pas "__main__", le code à l'intérieur du bloc if __name__ == "__main__": n'est pas exécuté. Cela démontre comment vous pouvez séparer le code destiné à une exécution directe des parties réutilisables de votre module.
Avantages de la Vérification Principale
Dans cette étape, vous explorerez les avantages clés de l'utilisation de la vérification if __name__ == "__main__":. Cette simple instruction conditionnelle est fondamentale pour écrire du code Python modulaire et réutilisable.
Les principaux avantages sont :
- Double Fonctionnalité : Elle permet à un fichier Python de servir à la fois de module réutilisable pouvant être importé et de programme autonome pouvant être exécuté directement.
- Encapsulation du Code : Elle garantit que le code de test, les points d'entrée de la ligne de commande ou les exemples d'utilisation ne s'exécutent que lorsque le fichier est exécuté directement, et non lorsqu'il est importé par un autre module. Cela empêche les effets secondaires inattendus.
- Modularité et Réutilisabilité : En séparant la logique au niveau du script des fonctions principales, vous rendez vos fonctions plus réutilisables et votre code plus facile à tester et à maintenir.
Illustrons cela avec un exemple pratique. Imaginez que vous créez un module utilitaire avec une fonction simple.
- Ouvrez le fichier
calculator.pydepuis l'explorateur de fichiers à gauche. - Ajoutez le code suivant à
calculator.py. La fonctionaddest réutilisable, tandis que le code à l'intérieur du blocifsert de test simple ou de démonstration.
## calculator.py
def add(a, b):
"""This function adds two numbers."""
return a + b
## This block will only execute when calculator.py is run directly.
## It's a good place for tests or a simple command-line interface.
if __name__ == "__main__":
print("Running calculator.py as a standalone script for testing.")
result = add(3, 5)
print(f"A test run of add(3, 5) results in: {result}")
Exécutez ce fichier directement pour voir le code de test en action :
python3 calculator.py
Le résultat montre que le bloc de test a été exécuté :
Running calculator.py as a standalone script for testing.
A test run of add(3, 5) results in: 8
Maintenant, réutilisons la fonction add dans notre application principale.
- Modifiez
main.pypour importer et utiliser la fonctionadddecalculator.py.
## main.py
from calculator import add
print("Using the 'add' function from the calculator module.")
sum_result = add(10, 20)
print(f"The result of add(10, 20) is: {sum_result}")
- Exécutez
main.pydepuis le terminal :
python3 main.py
Vous obtiendrez la sortie suivante :
Using the 'add' function from the calculator module.
The result of add(10, 20) is: 30
Comme vous pouvez le constater, le code de test de calculator.py n'a pas été exécuté. Nous avons réussi à importer et à utiliser la fonction add sans exécuter la logique spécifique au script, démontrant la puissance de la vérification if __name__ == "__main__": pour créer des modules propres et réutilisables.
Résumé
Dans ce laboratoire, vous avez découvert la portée __main__ en Python et l'importance du bloc conditionnel if __name__ == "__main__":.
Vous avez constaté que :
- La variable
__name__d'un module Python est définie sur"__main__"lorsque le fichier est exécuté directement. - Lorsque le module est importé, sa variable
__name__est définie sur le nom du fichier module. - La vérification
if __name__ == "__main__":vous permet d'écrire du code qui ne s'exécute que lorsque le fichier est exécuté comme un script autonome.
Cette fonctionnalité puissante est essentielle pour écrire du code Python modulaire et réutilisable, permettant à vos fichiers de servir à la fois de programmes exécutables et de bibliothèques importables. En séparant la logique spécifique au script de la fonctionnalité principale, vous pouvez créer des applications Python plus propres, plus maintenables et plus professionnelles.



