“ import foo.bar”和“ import foo”之间的区别?

时间:2019-05-11 19:18:37

标签: python python-import

我只是发现当我这样做

import pygame.joystick

我不仅可以访问joystick,而且可以访问display,例如,我可以访问

pygame.display.init()

就像我刚刚导入pygame一样。

有什么区别?

3 个答案:

答案 0 :(得分:4)

在导入时,将执行顶层模块的内部代码,并将该模块添加到sys.modules并可供使用。根据源文件中的内容,一切都会发生,并且可能发生。

在您的情况下,pygame/__init__.pypygame/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>