我正在通过Anaconda 2.1.0发行版使用scipy和numpy。我使用Spyder作为我的Python IDE。
当我运行时 import scipy as sp,我无法通过以下方式访问子包,例如optimize,linalg,cluster等。sp.
import scipy as sp
sp.
但是,运行时import numpy as np,我可以通过访问所有子包,例如linalg,random,matrixlib,多项式,测试等np。
import numpy as np
np
两种进口的工作方式不同,是否有原因?为什么不import scipy as sp将所有scipy子包都捕获到sp的命名空间中?
sp
通过设计python语言,可能会发生不同的导入行为。
默认情况下,模块(*)的import语句仅导入主模块,而不导入子模块。主模块可能(如的情况下numpy),也可能(如scipy)不导入部分或全部子模块。
numpy
scipy
其原因如下scipy:在大多数情况下,您只需要scipy包的一个子模块。此默认行为不会在加载代码不需要的子模块时将解释器挂起。
编辑:请注意,numpy默认情况下不会导入所有子模块,例如,它不会加载numpy.f2py,
numpy.f2py
(*)在这里我的意思是一个导入语句,例如import scipy或import scipy as sp,其中加载了模块。当然,如果您编写该代码,import scipy.optimize则python将首先加载主模块,然后加载子模块。
import scipy
import scipy.optimize