Que contient un __name__ (de Python)?

Une introduction à la variable _ _name_ _ et son utilisation en Python

Vous avez probablement vu la __name__variable lorsque vous avez parcouru le code Python. Ci-dessous, vous voyez un exemple d'extrait de code de son apparence:

if __name__ == '__main__': main()

Dans cet article, je veux vous montrer comment vous pouvez utiliser cette variable pour créer des modules en Python.

Pourquoi la variable _ _name_ _ est-elle utilisée?

La __name__variable (deux traits de soulignement avant et après) est une variable Python spéciale. Il obtient sa valeur en fonction de la façon dont nous exécutons le script contenant.

Parfois, vous écrivez un script avec des fonctions qui peuvent également être utiles dans d'autres scripts. En Python, vous pouvez importer ce script en tant que module dans un autre script.

Grâce à cette variable spéciale, vous pouvez décider si vous souhaitez exécuter le script. Ou que vous souhaitez importer les fonctions définies dans le script.

Quelles valeurs la variable __name__ peut-elle contenir?

Lorsque vous exécutez votre script, la __name__variable est égale à __main__. Lorsque vous importez le script contenant, il contiendra le nom du script.

Jetons un coup d'œil à ces deux cas d'utilisation et décrivons le processus avec deux illustrations.

Scénario 1 - Exécuter le script

Supposons que nous ayons écrit le scriptnameScript.py comme suit:

def myFunction(): print 'The value of __name__ is ' + __name__
def main(): myFunction()
if __name__ == '__main__': main()

Si vous exécutez nameScript.py, le processus ci-dessous est suivi.

Avant que tout autre code ne soit exécuté, la __name__variable est définie sur __main__. Après cela, lemainet les myFunctioninstructions def sont exécutées. Étant donné que la condition est évaluée à vrai, la fonction principale est appelée. Ceci, à son tour, appelle myFunction. Cela imprime la valeur de __main__.

Scénario 2 - Importer le script dans un autre script

Si nous voulons réutiliser myFunction dans un autre script, par exemple importingScript.py, nous pouvons importer en nameScript.pytant que module.

Le code importingScript.pypourrait être le suivant:

import nameScript as ns
ns.myFunction()

Nous avons alors deux portées: l'une de importingScriptet la seconde portée de nameScript. Dans l'illustration, vous verrez en quoi il diffère du premier cas d'utilisation.

Dans importingScript.py, la __name__variable est définie sur __main__. En important nameScript, Python commence à rechercher un fichier en l'ajoutant .pyau nom du module. Il exécute ensuite le code contenu dans le fichier importé.

Mais cette fois,est défini sur nameScript. Encore une fois, les instructions def pour main et myFunction sont exécutées. Mais, maintenant, la condition est évaluée à false et main n'est pas appelée.

Dans importingScript.py, nous appelons myFunction qui génère nameScript. NameScript est connu de myFunction lorsque cette fonction a été définie.

Si vous imprimiez __name__dans le script d'importation, cela produirait __main__. La raison en est que Python utilise la valeur connue dans le cadre d'importingScript.

Conclusion

Dans ce court article, j'ai expliqué comment utiliser la __name__variable pour écrire des modules. Vous pouvez également exécuter ces modules seuls. Cela peut être fait en utilisant la façon dont les valeurs de ces variables changent en fonction de l'endroit où elles se produisent.