模块行为中的Python导入包

模块行为中的Python导入包,python,python-3.x,Python,Python 3.x,我有一个关于Python的行为问题。来自C背景,我了解到模块与头文件不同 以下是两个脚本: 模块1.py #!/usr/bin/python3 import urllib Driver.py #!/usr/bin/python3 import module1 我最初期望的行为是将urllib与驱动程序中的module1一起导入。然而,这不是我正在经历的行为。这样说对吗 #!/usr/bin/python3 import urllib import module1 或者这会导致urllib被

我有一个关于Python的行为问题。来自C背景,我了解到模块与头文件不同

以下是两个脚本:

模块1.py

#!/usr/bin/python3
import urllib
Driver.py

#!/usr/bin/python3
import module1
我最初期望的行为是将urllib与驱动程序中的module1一起导入。然而,这不是我正在经历的行为。这样说对吗

#!/usr/bin/python3
import urllib
import module1
或者这会导致urllib被导入两次

我在文档中读到,我可以这样做

from module1 import urllib
但这似乎太多了

我最初期望的行为是将
urllib
与驱动程序中的
module1
一起导入

为什么要这样做?您已在
module1
的命名空间(模块字典)中导入
urllib
,而不是在
Driver
的命名空间(模块字典)中导入

urllib
已导入,但在
module1
中,请尝试:

import Driver
Driver.module1.urllib
并确保没有引发任何
namererror
s,
urllib
在那里

这是否会导致导入两次
urllib

不,Python将看到
urllib
已经导入(通过查看
sys.modules
),只需在命名空间或
Driver
中为
urllib
创建一个条目

我最初期望的行为是将
urllib
与驱动程序中的
module1
一起导入

为什么要这样做?您已在
module1
的命名空间(模块字典)中导入
urllib
,而不是在
Driver
的命名空间(模块字典)中导入

urllib
已导入,但在
module1
中,请尝试:

import Driver
Driver.module1.urllib
并确保没有引发任何
namererror
s,
urllib
在那里

这是否会导致导入两次
urllib


不,Python将看到
urllib
已经导入(通过查看
sys.modules
),只需在名称空间或
Driver
中为
urllib
创建一个条目即可。好的,这很有意义。在C语言中,如果我将某个库导入头文件并将头文件导入驱动程序,则整个头文件都将被导入,包括导入的库。感谢您澄清这一区别。不要试图在
C
Python
@Shadowfax之间进行比较。:-)尽管Python最流行的实现是在
C
中实现的,但它是一种具有不同语义的完全不同的语言!看一看这个,它可以解决你可能遇到的大多数问题。好吧,这是有道理的。在C语言中,如果我将某个库导入头文件并将头文件导入驱动程序,则整个头文件都将被导入,包括导入的库。感谢您澄清这一区别。不要试图在
C
Python
@Shadowfax之间进行比较。:-)尽管Python最流行的实现是在
C
中实现的,但它是一种具有不同语义的完全不同的语言!看一眼,它几乎扫清了你可能遇到的大多数问题。