导入numpy和import numpy之间的区别为np

use*_*806 31 python numpy

我明白,如果可能,应该使用

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.f2pyimport numpy.f2py as myf2py:

  • import numpy.f2py
    • numpy放入本地符号表(指向numpy),并将numpy链接到numpy.f2py
    • numpy的numpy.f2py都可以访问
  • import numpy.f2py as myf2py
    • my2py放入本地符号表(指向numpy.f2py)
    • 其父级numpy未添加到本地符号表中.因此,您无法直接访问numpy


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你应该注意的机制的有趣用法:

1.长子进口

import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)
Run Code Online (Sandbox Code Playgroud)

2.兼容的API

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)