Bonsoir,
Les subtilités entre:
- import math
- from math import sqrt
sont difficiles à appréhender.
Personnellement, je m'en sors en disant que l'espace de noms du programme en cours d'exécution est adressable.
Les adresses sont de la forme:
<nom_module1>.<nom_module2>....
Cette forme d'adresse est similaire à un arbre:
<nom_module1> à pour fils <nom_module2>,...
Pensez à une arborescence de répertoires/sous répertoire | fichiers.
Cette structure d'arbre est quelque chose utilisé par le contexte d'exécution de votre programme.
Il servira à "trouver" les différents objets qui doivent être accédés pendant l'exécution. Lorsque cette exécution rencontre "from ... import..." ou "import...", notre arbre est modifié pour que l'interprétation des instructions à venir sachent quoi faire lorsqu'elles rencontrent certains noms.
L'interprétation de:
ordonne l'ajout d'une variable nommé "sqrt" dans l'espace de noms locals et de lui faire correspondre la fonction math.sqrt.
Comme les chemins non préfixés sont, par défaut, ceux du module courant.
trouve ses petits et fonctionne.
Lorsqu'on écrit: li = [ 1, 2, 3, 4 ], on ne fait rien d'autre.
Sauf qu'une liste n'est pas une fonction: l'instruction est différente.
Nous avons aussi une opération bizarre dans notre arbre: la redirection de "sqrt" vers "math.sqrt".
Dans le cas des répertoires, nous avons crée un "raccourcis" ou un "soft link".
L'objet original "sqrt" n'a pas bougé, nous avons ajouté une adresse dans l'espace de noms "locals" pour y accéder directement.
L'interprétation de :
est différente.
Nous ajoutons le module math et son contenu dans l'espace adressable du programme.
Pour adresser les fonctions de ce module, il faudra les préfixer par math.
Nous avons ajouté une branche aux modules accédés par le contexte d'exécution du programme.
En espérant que vous ayez pu en comprendre quelque chose.
- W
Partager