导入 modules/subpackages of numpy 和 Scipy 包的差异
Differences in importing modules/subpackages of numpy and Scipy packages
我正在通过 Anaconda 2.1.0 发行版使用 scipy 和 numpy。我使用 Spyder 作为我的 Python IDE.
当我运行import scipy as sp
时,无法通过sp.
访问optimize、linalg、cluster等子包
但是,当我运行import numpy as np
时,我能够通过np
.[=18=访问它的所有子包,例如linalg、random、matrixlib、polynomial、testing等。 ]
这两个导入以不同的方式工作是否有原因?为什么 import scipy as sp
没有将所有 scipy 子包抓取到 sp
的命名空间中?
这种不同导入行为的可能性是 python 语言的设计造成的。
模块的导入语句(*)默认只导入主模块,不导入子模块。主模块可能(如 numpy
的情况),也可能不(如 scipy
)导入部分或全部子模块。
scipy
说明了这背后的原因:在大多数情况下,您只需要 scipy
包的一个子模块。此默认行为不会在加载代码不需要的子模块时挂起解释器。
编辑:
请注意 numpy
默认情况下不会导入所有子模块,例如它不会加载 numpy.f2py
,请参阅 THIS question/answer 了解更多详细信息。
(*) 在这里我指的是像 import scipy
或 import scipy as sp
这样的导入语句,其中加载了一个模块。当然如果你写import scipy.optimize
那么python会先加载主模块,然后是子模块。
我正在通过 Anaconda 2.1.0 发行版使用 scipy 和 numpy。我使用 Spyder 作为我的 Python IDE.
当我运行import scipy as sp
时,无法通过sp.
但是,当我运行import numpy as np
时,我能够通过np
.[=18=访问它的所有子包,例如linalg、random、matrixlib、polynomial、testing等。 ]
这两个导入以不同的方式工作是否有原因?为什么 import scipy as sp
没有将所有 scipy 子包抓取到 sp
的命名空间中?
这种不同导入行为的可能性是 python 语言的设计造成的。
模块的导入语句(*)默认只导入主模块,不导入子模块。主模块可能(如 numpy
的情况),也可能不(如 scipy
)导入部分或全部子模块。
scipy
说明了这背后的原因:在大多数情况下,您只需要 scipy
包的一个子模块。此默认行为不会在加载代码不需要的子模块时挂起解释器。
编辑:
请注意 numpy
默认情况下不会导入所有子模块,例如它不会加载 numpy.f2py
,请参阅 THIS question/answer 了解更多详细信息。
(*) 在这里我指的是像 import scipy
或 import scipy as sp
这样的导入语句,其中加载了一个模块。当然如果你写import scipy.optimize
那么python会先加载主模块,然后是子模块。