2
votes

différence entre "import foo.bar" et "import foo"?

Je viens de découvrir que lorsque je fais

pygame.display.init()

je n'ai pas seulement accès au joystick , mais aussi à display , c'est-à-dire que je peut par exemple faire

import pygame.joystick

comme si j'avais simplement importé pygame.

Quelle est la différence? p >


4 commentaires

En effet, pygame.display est une dépendance importée de manière transitoire. Vous ne pouvez pas compter sur cela pour chaque colis. Mieux vaut importer vos dépendances explicitement.


@MartijnPieters, cela signifie qu'il y a une instruction import pygame.display dans le code d'initialisation du package?


consultez également la section importation de sous-modules de la documentation python pour le comportement général


@ A.Donda: oui, peut-être que dans pygame / __ init__.py , ou pygame.joystick a cette importation, ou l'un de ceux-ci importe quelque chose qui ensuite (éventuellement) importe < code> pygame.display . Un détail de mise en œuvre.


3 Réponses :


4
votes

Lors de l'importation, le code interne du module au niveau supérieur est exécuté, et le module est ajouté à sys.modules et mis à disposition. En fonction de ce qui se trouvait à l'intérieur du fichier source, tout peut et peut arriver.

Dans votre cas, l'un des éléments pygame / __ init__.py ou pygame / joystick.py contient :

import pygame.display

D'où la disponibilité du module que vous n'essayiez même pas d'importer.


0 commentaires

5
votes

Ce qui se passe, c'est que l'importation de pygame.joystick déclenche des importations supplémentaires; soit le package pygame lui-même, soit pygame.joystick , ou l'un des modules pygame. * que ces deux modules importent, arrive à importer pygame.display quelque part.

Le fait que vous puissiez maintenant référencer pygame.display est donc un accident de détails d'implémentation. Vous ne pourrez peut-être pas le faire dans les versions futures (si le projet n'a plus besoin d'importer pygame.display pour charger pygame.joystick , par exemple).

Il vaut mieux s'en tenir à une importation explicite dans votre propre projet.


0 commentaires

1
votes

Dans le code source du joystick, ils importent pygame.display ou pygame et le tri.

Dans la version C de la documentation:

Dans le fichier joystick.c ils ont joystick.h inclus

#include <joystick.h>


0 commentaires