进口package.submodule的好处是什么?

时间:2017-07-23 04:35:12

标签: python import packages python-import

numpy为例,我似乎无法意识到这样做导入的好处是什么:

import numpy.lib

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

import numpy

两个案例中,您只能通过虚线访问访问子模块lib

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

是否存在做import numpy.lib会有益的情况?

1 个答案:

答案 0 :(得分:5)

摘要

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

目录结构示例

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

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

外部/ __ init__.py为空的情况

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

外部/ __ 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具有完全相同的效果。

希望能为你清除它: - )