Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/12/2012, 14h35   #1
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 164
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 164
Points : 41
Points : 41
Par défaut Question d'imports répétés

[Avant propos : j'ai bouffé du tuto mais je n'apprends ce langage que depuis 2 jours]

Bonjour à tous,

J'ai un fichier1 qui importe shutil (entre autres).

Il y a dans ce fichier1 un appel vers une classe de fichier2.
Je pensais que le fichier1 pouvait "réutiliser" ses imports avec le fichier2 car ce dernier devient inclus dans fichier1 par l'appel.

Et effectivement si j'importe shutil dans le fichier2, tout rentre dans l'ordre.

La question : peut-on éviter de faire appel plein de fois à la même librairie dans le cadre d'une inclusion de fichier ?
Parce que j'imagine qu'on perd en perf dans mon cas.

Merci à vous,

A bientôt,

LeHibou
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 15h48   #2
VinsS
Membre Expert
 
Homme
Inscription : octobre 2008
Messages : 942
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : octobre 2008
Messages : 942
Points : 1 413
Points : 1 413
Non, c'est la procédure normale.

shutil n'est réellement importé qu'une seule fois.

Lorsque tu l'importes à nouveau dans un autre module, il est simplement ajouté à l'espace de nom de ce module, sans quoi tu ne pourrai l'utiliser dans celui-ci.
__________________
Vincent
Oqapy . Qarte . PaQager
VinsS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 15h54   #3
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
Salut,
Lorsqu'un script est "importé", il devient "module".
"import" ajoute des définitions de variables au "module" fichier1.

La définition des variables d'un "module" va dans l'espace de nom "globals()" qui malgré son nom est "local" au module.
=> les imports effectués dans "fichier1" modifient son "globals()" mais pas celui du module "fichier2"

Citation:
La question : peut-on éviter de faire appel plein de fois à la même librairie dans le cadre d'une inclusion de fichier ?
Parce que j'imagine qu'on perd en perf dans mon cas.
Les intuitions acquises avec d'autres langages doivent être retravaillées.
"import" fait 2 choses:
  1. charger le module,
  2. modifier l'espace de nommage,
Si le module a déjà été chargé, çà se contente de modifier l'espace de nommage.
Exemple "simpliste":
Code :
1
2
3
4
5
>>> import sys as m1  # importe sys et l'accès au globals() de sys se fait par la variable "globale" m1
>>> m1.foobar = "abcd" # modifie "sys" via m1.
>>> import sys as m2 # import de sys via m2
>>> m2.foobar # le "sys" n'est pas "rechargé".
'abcd'
note: pour recharger le module, il faut un "reload" explicite...
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2012, 16h24   #4
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 164
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 164
Points : 41
Points : 41
Merci beaucoup à vous deux, vous avez contribué à mon apprentissage

Effectivement, je viens d'autres langages et c'était un point qu'il me fallait comprendre.


Merci beaucoup à vous encore une fois et bonnes fêtes si vous y accordez une quelconque attention

LeHibou
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h34.


 
 
 
 
Partenaires

Hébergement Web