Les modules : Définition et syntaxe
Bonjour,
Je me suis perdue dans cette vidéo on me conseille d'utiliser la syntaxe
import random
plutôt que
from random import*
Lorsque j'utilise
print(dir(random))
sur ces deux façons d'importer un module,
cela me retourne beaucoup plus de chose avec la première façon que lorsque j'importe "tout", et je n'ai que la variable __main__ commune ce qui me fait complètement perdre le sens des explications de la vidéo et je suis trop dans le flou pour poser une question précise :/
Salut Céline,
Très intéressant ce cas de figure, ça montre justement le "danger" de l'import avec l'astérisque.
Pour te rendre compte de pourquoi le résultat est différent, tu peux avoir un indice en affichant le type des objets :
from random import *
print(type(random))
import random
print(type(random))
Je dis souvent que pour déboguer une situation, il y a 2 informations impératives à connaître : la valeur et le type d'un objet.
Tu vois qu'ici, quand on affiche le type de random après les 2 imports, on n'a pas la même chose :
<class 'builtin_function_or_method'>
<class 'module'>
En fait, le module random contient une fonction qui s'appelle également random.
Ainsi, quand tu importes avec l'astérisque et que tu fais un dir(random), tu affiches les attributs de la fonction random.random (la fonction random contenue dans le module random) et non pas les attributs du module.
Quand par contre tu fais import random, là tu affiches bien les attributs du module directement.
D'où la différence entre les deux et le fait que l'import avec l'astérisque te montre beaucoup moins d'informations, car il t'affiche uniquement les attributs de la fonction (qui ne sont que des méthodes "dunder" propre à quasiment tous les objets Python pour le bon fonctionnement des mécanismes de base d'un objet).
Quand tu affiche les attributs du module random, là par contre tu vois bien toutes les fonctions disponibles... dont la fonction random ;)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
J'espère que c'est plus clair :)
Bonne continuation !
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte