【问题标题】:What's the benefit of doing import package.submodule?做 import package.submodule 有什么好处?
【发布时间】:2017-12-28 21:57:01
【问题描述】:

numpy 为例,我似乎无法意识到像这样导入会带来什么好处:

import numpy.lib

导入完成后,numpy 作为名称可用,相当于直接导入:

import numpy

两种情况中,您只能通过点分访问子模块lib

>>> numpy.lib
<module 'numpy.lib' from ....>

在某些情况下,import numpy.lib 会有所帮助吗?

【问题讨论】:

  • import numpy 导入所有 numpy 子模块,包括那些您不使用的子模块。 import numpy.lib 仅导入 numpy.lib

标签: python import packages python-import


【解决方案1】:

总结

实际效果取决于模块是如何实现的。外部模块可能会也可能不会导入子包。有关详细信息,请参阅软件包上的 tutorial section

示例目录结构

例如,这是一个可能的目录结构

outer
├── outer/__init__.py
└── outer/inner
    └── outer/inner/__init__.py

outer/__init__.py 为空的情况

>>> import outer               # only loads outer
>>> import outer.inner         # loads both outer and inner 

outer/__init__.py 加载子模块的情况

如果outer/__init__.py 文件包含from . import inner,那么你会得到:

>>> import outer               # loads both outer and inner
>>> import outer.inner         # loads both outer and inner 

来自 NumPy 的特定案例

numpy 模块匹配第二种情况,所以import numpyimport numpy.lib 具有相同的效果。这是 numpy 的 __init__.py 文件中的一个例外:

from . import core
from .core import *
from . import compat
from . import lib
from .lib import *
from . import linalg
from . import fft
from . import polynomial
from . import random
from . import ctypeslib
from . import ma
from . import matrixlib as _mat
from .matrixlib import *
from .compat import long

结论

numpy的具体情况下,import numpyimport numpy.lib效果完全一样。

希望能为您解决问题:-)

【讨论】:

  • 啊,所以区别在于import numpy.lib 将同时执行numpy/__init__.py(如果存在)和numpy/lib/__init__.py(如果存在)?
猜你喜欢
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多