2017-03-06 72 views
1

我是通过什么numpy.random可戳进口究竟(以及为什么)我可以通过numpy.random访问所有的Nu​​mPy?

from numpy import random 

dir(random)后,并注意到,有范围,这似乎等同于顶层模块的变量np,例如

In[1]: from numpy import random 

In[2]: random.np.fft.fft2 
Out[2]: <function numpy.fft.fftpack.fft2> 

In[3]: random.np.random.np.fft.np # not the same for fft 

AttributeErrorTraceback (most recent call last) 
<ipython-input-78-a64e04c36c80> in <module>() 
----> 1 random.np.random.np.fft.np 

AttributeError: module 'numpy.fft' has no attribute 'np' 

这对我来说似乎有点奇怪......或者至少不是我以前在其他Python模块中见过的东西。看起来我可以通过random中的np变量访问import numpy as np

我想看看它是如何可用的子模块,所以我在源代码中查找numpy/random/__init__.py,并没有看到它是如何提供的。我也看过numpy/random/info.py__all__,但无法找到它如何暴露给模块。

顶级模块如何提供给numpy.random,并且有没有动力使它可用?

回答

2

所以numpy/random/mtrand/mtrand.pyxline 146我们发现:

import numpy as np 

因此将符号到模块的名称空间。其中,这是python,你可以访问。我想这条线是出于同样的原因,我们把它扔在我们的模块上,即这个模块需要访问numpy功能。

和备份我们/numpy/random/__init__.pyline 99找到一个级别:

from .mtrand import * 

封闭的圈子,并得到我们通过numpy.random模块接入np

+0

您找到它了!比我更直接地表达,谢谢! –

相关问题