Bonjour à tous.tes,
Qu'elle différence y a t'il entre :
import os et from os import * :?
Version imprimable
Bonjour à tous.tes,
Qu'elle différence y a t'il entre :
import os et from os import * :?
Bonjour
Question plus générale: différence entre from lib import * et import lib...
Partons du principe que la lib contienne une fonction "toto". Dans la première version from lib import *, la fonction est directement intégrée dans l'espace de nom global du programme. Elle est alors accessible simplement par son nom => res=toto().
Dans la seconde version import lib, cela crée un espace de nom spécifique "lib" dans lequel se trouve la fonction. Elle n'est alors accessible que si on précise l'espace dans lequel elle se trouve => res=lib.toto().
La première version est sans doute plus attrayante MAIS si tu importes plusieurs libs différentes qui, toutes, contiennent une fonction "toto", celle du dernier import écrase les autres.
Si dans le module os, la variable toto est définie par toto = 123.
le "from os import *" va fabriquer une variable (globale) toto dans le module courant.
Juste après l'import un print(toto) affichera 123.
Maintenant, si on appelle la fonction tartemolle de os qui modifie cette variable en "xyz"... seule la variable toto (globale) au module toto sera modifiée et print(toto) affichera toujours 123.
Si on écrit "import os", on ne définira que la variable os a associée à l'objet module. Et pour accéder à la variable toto de ce module, il faudra utiliser le nom composé os.toto. Du coup, le module devient Singleton...
Règles à 3 sous.
Si vous codez un exemple pour découvrir une fonctionnalité du module os, le "from os import *" est raisonnable. Pour du vrai code, utiliser import os ou import os as .... Puis pour optimiser (l'accès à os.toto à une indirection vs toto seul), on peut avoir (en plus) des from os import toto,....
- W
Merci,
Avec vos deux retours, je pense avoir bien compris :
Pour en être sur, j'ai testé dans mon exercice précédent avec la fonction randrange du module random :
Par contre, la fonction tartemolle() du module os me retourne un message d'erreur :marteau:Code:x, y =random.randrange(40, 180, 40), random.randrange(40, 180, 40)