例如,如果我按如下方式导入:
from numpy import empty, full, zeros, matrix, arange, asarray, array
然后我可能会生成一些列表:
stuff = []
for i in range(N):
stuff.append(things)
然后,我意识到我必须做一些数学!所以我输入:
math_stuff = array(stuff)
由于我不必输入 numpy.array 或 np.array,根据我声明导入的方式,我如何知道我的 IDE 更喜欢 numpy 版本而不是内置版本?这是自动的吗?
我检查了 numpy.array() 和 python 内置 array() 的文档,看起来它们都接受相同的“类似列表”参数。
最佳答案
正如评论者所说,只需查看最新的导入语句,您就可以轻松判断正在使用哪个。但是,如果您担心/困惑,您还可以使用 Python 方便的内置反射功能直接检查函数或类源自的模块。
例如以下Python语句:
print(array.__module__)
如果 array
是从 numpy
包导入的,将打印字符串 'numpy.core.multiarray'
,或者打印字符串 'array'
如果它是从 array
包导入的。
如果x.__module__
失败,请通过dir(x)
探索替代方案
@ShadowRanger 提出了一些优点,即某些 Python 对象没有 __module__
属性。特别是,如果您仅运行 import array
,则 array
是一个模块,并且 print(array.__module__)
调用将会失败。在这种情况下,您始终可以通过 dir() 函数发现哪些反射信息实际上可用。
dir()
无疑是我最喜欢的 Python 功能。对于任何 Python 对象 x
,dir(x)
都会打印出 x
的完整属性列表。例如,假设您刚刚运行 import array
,执行 dir(array)
将打印出:
['ArrayType',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'_array_reconstructor',
'array',
'typecodes']
这表明,即使数组模块缺少 __module__
,但也有其他可用的反射信息,例如 __name__
和 __file__
。
关于python - 我如何知道我是否正在调用 numpy.array() 还是使用内置数组函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49546472/