我应该使用`import os.path`还是`import os`?

我应该使用`import os.path`还是`import os`?,第1张

我应该使用`import os.path`还是`import os`?

os.path
以一种有趣的方式工作。看起来
os
应该是一个带有子模块的程序包
path
,但实际上
os
是一个普通的模块,
sys.modules
可以注入魔力
os.path
。这是发生了什么:

  • Python启动时,会将一堆模块加载到中

    sys.modules
    。它们没有绑定到脚本中的任何名称,但是以某种方式导入它们时,您可以访问已创建的模块。

    • sys.modules
      是在其中缓存模块的命令。导入模块时,如果它已经被导入到某处,它将获取实例存储在中
      sys.modules
    • os
      是Python启动时加载的模块之一。它将其
      path
      属性分配给特定于os的路径模块。
  • 它会注入,

    sys.modules['os.path'] = path
    以便您可以像对待
    import os.path
    子模块一样执行“ ”。

我倾向于将其

os.path
看作 是我要使用
os
模块
,而不是 模块中的 任何东西 ,因此,即使它 实际上
不是被称为包的子模块
os
,我也可以将其导入,就像 我一直那样
import os.path
。这与
os.path
记录方式一致。


顺便说一句,我认为这种结构导致很多Python程序员对模块和包以及代码组织产生了早期的困惑。这确实有两个原因

  1. 如果您将其

    os
    视为一个包并且知道可以执行
    import os
    并有权访问该子模块
    os.path
    ,则稍后可能会感到惊讶,因为您无法执行
    import twisted
    并且
    twisted.spread
    无需导入就可以自动访问。

  2. 令人困惑的是,这

    os.name
    是正常现象,字符串和
    os.path
    模块。我总是用空
    __init__.py
    文件来构造我的包,以便在同一级别上我总是有一种类型的东西:模块/包或其他东西。几个大型的Python项目都采用这种方法,这往往会使代码更加结构化。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5566000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存