编程语言
首页 > 编程语言> > python多段导入会做些额外的事情吗?

python多段导入会做些额外的事情吗?

作者:互联网

我在一个学生的脚本中看到了以下内容,令我惊讶的是它起作用了:

>>> import os.path

简而言之,问题是:这与简单的import os有何不同?还是一样,除了必须存在os.path?

正如您在下面看到的,它不是在我的范围内定义路径,而是在os中.

>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']

因此,问题是:python对此做了什么?当然,它会导入(并执行)模块os.它还确保os.path确实解析为有效的东西. (感谢@Lee和@Stuart提供了确认该链接的文档的链接.)但是还有更多吗?还是import pkg.submod总是等同于import pkg(提供的pkg.submod存在)?

如果我导入os,则它已经导入/执行了os本身导入的所有模块.因此os.path已经加载.是否有安排(不太奇怪),与仅导入pkg相比,导入pkg.submod可能导致执行不同的代码,执行的代码不同或顺序不同,或者产生不同的副作用?多段表单有合法的用例吗? (换句话说:有什么意义?)

解决方法:

docs开始:

[The fully qualified name of the module] will be used in various phases of the import search, and it
may be the dotted path to a submodule, e.g. foo.bar.baz. In this case,
Python first tries to import foo, then foo.bar, and finally
foo.bar.baz. If any of the intermediate imports fail, an ImportError
is raised.

因此,要回答您的原始问题,似乎如果os是一个有效的程序包,则整个模块都将被导入.因此,正如您所建议的,子模块形式将用于验证os.path是否存在于os模块中,而不仅仅是导入模块os.path.

如果只想导入路径模块,则可以使用from … import …语法:

>>> from os import path
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'path']

另请参阅:from … import vs import .

标签:python-3-x,python-import,python
来源: https://codeday.me/bug/20191118/2029542.html