import numpy as np
这有助于避免由于命名空间引起的任何冲突,但我注意到尽管下面的命令有效,
import numpy.f2py as myf2py
以下内容不包括在内
import numpy as np
np.f2py #throws no module named f2py
可以有人请解释一下吗?
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
这里是 import numpy.f2py
和 import numpy.f2py as myf2py
之间的区别:
import numpy.f2py
import numpy.f2py as myf2py
import as
语法是在PEP 221中引入的,并且在那里得到了很好的文档记录。
当您通过
import numpy
numpy包绑定到本地变量numpy
。使用import as
语法只是允许您将导入绑定到自己选择的本地变量名称(通常是为了避免名称冲突,缩短冗长的模块名称或标准化访问具有兼容API的模块)。
因此,
import numpy as np
等同于,
import numpy
np = numpy
del numpy
当试图理解这个机制时,值得记住的是import numpy
实际上意味着import numpy as numpy
。
当导入一个子模块时,您必须引用完整的父模块名称,因为导入机制发生在本地变量作用域之上。例如:
import numpy as np
import numpy.f2py # OK
import np.f2py # ImportError
numpy
。它从未为我阻止过名称冲突(程序员的懒惰实际上表明了使用np
会更容易导致冲突的可能性更高)。import as
机制的用途,你应该知道:
import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)
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
f2py
是模块 numpy
的一个子包,必须单独加载。numpy
中加载所需的包,加快执行速度。
- f2py
的开发人员与另一个子包的开发人员具有命名空间分离。import numpy.f2py
或其变体 import numpy.f2py as myf2py
仍在加载父模块 numpy
。import numpy as np
np.f2py
你收到了一个 AttributeError
,因为f2py
不是numpy
的属性,因为包numpy
的__init__()
没有在其范围内声明任何关于子包f2py
的内容。
import numpy.f2py as myf2py
时,如何访问其父级numpy?似乎import numpy.f2py
允许您访问其父级numpy
,但是import numpy.f2py as myf2py
不允许。 - ahanumpy
中的任何内容,而且你只关心使用子包。这类似于使用from foo import bar
:名称foo
将无法访问。请参见文档第一个示例后面的注释,链接。 - gg349numpy.f2py
实际上是numpy
的一个子模块,因此必须与numpy分开导入。正如aha之前所说:
当您执行import numpy时,它会创建一个指向numpy的链接,但numpy没有进一步链接到f2py。当您执行import numpy.f2py时,链接才建立。
当您调用语句import numpy as np
时,您将短语"numpy"缩短为"np",以使您的代码更易于阅读。它还有助于避免命名空间问题。(tkinter和ttk就是一个很好的例子,当你遇到这个问题时,UI看起来非常不同。)
这是一篇比较旧的帖子,但我想补充一些其他人提供的解释。
numpy(参见git存储库)包含各种子包,其中之一是f2py,其他子包包括core、ma等。
如果您参考numpy包中的init.py文件,它会导入如下内容:
from . import core etc
import numpy as np
np.f2py
import numpy as np
np.core
将会工作。
import numpy
,然后执行numpy.f2py
吗?在我的情况下,它也会抛出一个错误。 - ahanumpy
本身,您都需要显式地导入numpy.f2py
模块。 - alecbz