import package.submodule 有什么好处?
What's the benefit of doing import package.submodule?
以numpy
为例,我似乎没有意识到像这样导入的好处是什么:
import numpy.lib
导入完成后,numpy
作为名称可用,相当于直接导入:
import numpy
在两种情况下,您只能通过点访问访问子模块lib
:
>>> numpy.lib
<module 'numpy.lib' from ....>
是否存在这样做 import numpy.lib
有益的情况?
总结
实际效果取决于模块的实现方式。外部模块可能会也可能不会导入子包。有关详细信息,请参阅包装上的 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 numpy
和import 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 numpy
和import numpy.lib
具有完全相同的效果。
希望这能帮您解决问题:-)
以numpy
为例,我似乎没有意识到像这样导入的好处是什么:
import numpy.lib
导入完成后,numpy
作为名称可用,相当于直接导入:
import numpy
在两种情况下,您只能通过点访问访问子模块lib
:
>>> numpy.lib
<module 'numpy.lib' from ....>
是否存在这样做 import numpy.lib
有益的情况?
总结
实际效果取决于模块的实现方式。外部模块可能会也可能不会导入子包。有关详细信息,请参阅包装上的 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 numpy
和import 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 numpy
和import numpy.lib
具有完全相同的效果。
希望这能帮您解决问题:-)