我理解在可能的情况下应该使用
import numpy as np这有助于避免由于名称空间而导致的任何冲突。但我注意到,虽然下面的命令可以正常工作
import numpy.f2py as myf2py以下内容不支持
import numpy as np
np.f2py #throws no module named f2py有人能解释一下这个吗?
发布于 2014-03-25 07:33:21
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下面是import numpy.f2py和import numpy.f2py as myf2py之间的区别
import numpy.f2py numpy
import numpy.f2py as myf2py parent
发布于 2014-03-25 08:59:24
import as语法是在PEP 221中引入的,在那里有很好的文档记录。
当您通过导入模块时
import numpynumpy包被绑定到本地变量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”。这样做是有历史原因的,主要是因为人们很快就厌倦了在每个操作前加上numpy。对我来说,它从未阻止过名称冲突(程序员的懒惰实际上表明与np发生冲突的可能性更高)
最后,为了结束我的演讲,这里有两个您应该知道的import as机制的有趣用法:
1.长子导入
import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)2.兼容的APIs
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发布于 2014-03-25 07:58:00
这是一种语言特性。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的任何内容。
https://stackoverflow.com/questions/22622571
复制相似问题