gpt4 book ai didi

python - python 是否对多段导入做了额外的事情?

转载 作者:行者123 更新时间:2023-11-28 16:24:49 25 4
gpt4 key购买 nike

我在学生的脚本中看到以下内容,令我惊讶的是它有效:

>>> import os.path

简而言之,问题是:这与简单的 import os 有什么不同?或者除了必须存在 os.path 之外,它是否相同?

正如您在下面看到的,它没有在我的范围内定义 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.submod 可能导致不同的代码被执行,或者以不同的顺序执行,或者有不同的副作用,而不是仅仅导入 pkg?多段形式是否有合法的用例? (换句话说:有什么意义?)

最佳答案

来自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.

如果你想导入path模块,那么你可以使用from ... import ...语法:

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

另请参阅:from … import vs import .

关于python - python 是否对多段导入做了额外的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37414499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com