2010-06-29 6 views
2

J'ai remarqué que l'importation d'un module va importer ses fonctions et méthodes, ainsi que les fonctions et méthodes de celles-ci. Existe-t-il une règle pour le nombre de niveaux que python importera lors de l'importation d'un module de niveau supérieur?python import profondeur

modifier

désolé, je pense que j'ai mal compris par les réponses à ce jour répondu à propos de multiples importations de certaines dépendances. Je pense aux dossiers imbriqués, par exemple dans django, si vous importez django, vous pouvez accéder à django.contrib.auth, mais vous ne pouvez pas accéder à django.contrib.auth.views, sauf si vous l'importez spécifiquement. Je me demandais s'il est toujours deux niveaux dans un tel cas

second plan

à nouveau préciser .. dans l'exemple de django, la mise en page est /django/contrib/auth/views.py, où chacun des sous-dossiers a un "init .py" en en faisant un module, dont aucun ne définit aucun attribut "all". Mon exemple est-il mauvais, puisque peut-être vous ne pouvez pas utiliser la syntaxe de point pour naviguer vers un dossier dans un dossier désigné de module?

+0

Demandez-vous à propos de la construction '__all__' qui définit ce qui est importé par un paquet? –

+0

pas vraiment .. "__all__" semble réduire le nombre d'objets importés, à ceux spécifiés. cela soulève une autre question de savoir si vous pouvez utiliser "__all__" pour inclure un dossier contenu dans le dossier - mais je me demande plus ce qui se passe par défaut aux sous-dossiers python valides d'un import de paquet, sans "__all__" – user379260

+0

disscusion: https://groups.google.com/forum/#!topic/comp.lang.python/HYChxtsrhnw – PersianGulf

Répondre

1

Pas vraiment. Un module importe des choses à partir d'autres modules car il doit les utiliser dans ce module, sinon il va se casser.

3

Non, python importera ce qu'il doit importer. Cependant, chaque module n'est importé qu'une seule fois. Par exemple, si un module importe sys et qu'un autre module importe sys, il ne le fera pas physiquement deux fois.

1

Il n'y a pas de niveau de profondeur d'importation prédéfini. Les instructions d'importation sont exécutées, comme n'importe quelle autre instruction python. Mais, vous vous demandez peut-être comment les cycles sont-ils évités? Les modules sont ajoutés à sys.modules (c'est-à-dire mis en cache) lorsqu'ils sont importés pour la première fois, et c'est le premier emplacement examiné lorsqu'une instruction d'importation est exécutée. Chaque module est donc chargé une seule fois, bien qu'il puisse apparaître dans de nombreuses instructions d'importation.