我明白,如果可能,应该使用
import numpy as np
Run Code Online (Sandbox Code Playgroud)
这有助于防止由命名空间引起的任何冲突.但我注意到,虽然下面的命令有效
import numpy.f2py as myf2py
Run Code Online (Sandbox Code Playgroud)
以下没有
import numpy as np
np.f2py #throws no module named f2py
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
aha*_*aha 20
numpy是顶级包名称,并且import numpy不执行导入子模块numpy.f2py.
当你做import numpy它.外币指向一个链接numpy,但numpy没有进一步的链接f2py.这样就建立了链接import numpy.f2py
在上面的代码中:
import numpy as np # np is an alias pointing to numpy, but at this point numpy is not linked to numpy.f2py
import numpy.f2py as myf2py # this command makes numpy link to numpy.f2py. myf2py is another alias pointing to numpy.f2py as well
Run Code Online (Sandbox Code Playgroud)
这里的区别import numpy.f2py和import numpy.f2py as myf2py:
import numpy.f2py
import numpy.f2py as myf2py
hbr*_*tow 15
该import as语法年推出的PEP 221,并且有据可查的存在.
通过导入模块时
import numpy
Run Code Online (Sandbox Code Playgroud)
numpy包绑定到局部变量numpy.该import as语法简单,您可以导入到您选择的局部变量名绑定(通常以避免名称冲突,缩短冗长的模块名称,或与规范兼容的API访问模块).
从而,
import numpy as np
Run Code Online (Sandbox Code Playgroud)
相当于,
import numpy
np = numpy
del numpy
Run Code Online (Sandbox Code Playgroud)
当试图理解这种机制时,值得记住import numpy实际意味着import numpy as numpy.
导入子模块时,必须引用完整的父模块名称,因为导入机制发生在比局部变量范围更高的级别.即
import numpy as np
import numpy.f2py # OK
import np.f2py # ImportError
Run Code Online (Sandbox Code Playgroud)
我也断言你的断言"在可能的情况下应该[导入numpy as np]".这是出于历史原因,主要是因为人们很快就会为每个操作添加前缀numpy.从来没有阻止过我的名字冲突(程序员的懒惰实际上暗示了导致碰撞的可能性更高np)
最后,为了完善我的曝光,这里有两个import as你应该注意的机制的有趣用法:
import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)
Run Code Online (Sandbox Code Playgroud)
try:
import pyfftw.interfaces.numpy_fft as fft
except:
import numpy.fft as fft
# call fft.ifft(If) with fftw or the numpy fallback under a common name
Run Code Online (Sandbox Code Playgroud)