导入后我正在研究numpy.random
中可用的内容
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
at __all__
,但找不到它如何暴露给模块。
如何将顶级模块提供给numpy.random
,以及有什么动机让它可用吗?
最佳答案
所以在numpy/random/mtrand/mtrand.pyx
line 146我们发现:
import numpy as np
从而将符号放入模块的命名空间中。这是Python,你可以访问。我想这行代码的存在与我们将其散布在模块中的原因相同,即该模块需要访问 numpy 功能。
并备份我们在 /numpy/random/__init__.py
line 99 中找到的一级。 :
from .mtrand import *
这关闭了循环并让我们通过numpy.random
模块访问np
。
关于python - 我到底如何(以及为什么)可以通过 numpy.random 访问所有 NumPy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42616804/