我只是发现当我这样做
import pygame.joystick
我不仅可以访问joystick
,而且可以访问display
,例如,我可以访问
pygame.display.init()
就像我刚刚导入pygame
一样。
有什么区别?
答案 0 :(得分:4)
在导入时,将执行顶层模块的内部代码,并将该模块添加到sys.modules
并可供使用。根据源文件中的内容,一切都会发生,并且可能发生。
在您的情况下,pygame/__init__.py
或pygame/joystick.py
均包含:
import pygame.display
因此,您甚至都没有尝试导入的模块。
答案 1 :(得分:4)
正在发生的事情是,导入pygame.joystick
会触发其他导入; pygame
包本身或pygame.joystick
或这两个模块导入的任何pygame.*
模块,都恰好在某处导入了pygame.display
。
因此,您现在可以引用pygame.display
的事实是实现细节的偶然。您可能无法在将来的版本中使用(例如,如果项目不再需要导入pygame.display
来加载pygame.joystick
)。
最好在您自己的项目中坚持明确的导入。
答案 2 :(得分:0)
在操纵杆的源代码中,他们正在导入pygame.display或pygame及其排序。
在C版文档中:
在文件joystick.c中,他们包含了joystick.h
#include <joystick.h>