我怎么知道我是在调用numpy.array()还是使用内置数组函数?

时间:2018-03-29 01:03:16

标签: python python-3.x numpy

例如,如果我导入如下:

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()中的文档,看起来它们都接受了相同的"列表,如"论点。

2 个答案:

答案 0 :(得分:2)

正如评论者所说,只需查看最新的import语句,就可以轻松判断哪一个正在被使用。但是,如果您感到担心/困惑,您还可以使用Python方便的内置反射功能直接检查函数或类所源自的模块。

例如,以下Python语句:

print(array.__module__)
如果从'numpy.core.multiarray'包导入array

将打印出字符串numpy,如果从'array'包导入array,则打印出字符串x.__module__

如果dir(x)失败,请通过__module__

探索替代方案

@ShadowRanger提出了一些优点,即某些Python对象没有import array属性。特别是,如果仅运行array,则print(array.__module__)是一个模块,dir()调用将失败。在这种情况下,您始终可以通过dir()函数发现实际可用的反射信息。

x很容易成为我最喜欢的Python功能。对于任何Python对象dir(x)x打印出import array的完整属性列表。例如,假设您刚刚运行dir(array),则执行['ArrayType', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_array_reconstructor', 'array', 'typecodes'] 将打印出来:

__module__

这表明即使数组模块缺少__name__,也有其他反映信息,例如__file__f

答案 1 :(得分:1)

如果可以的话,最好的方法可能是保持名称空间清洁:

执行:import numpyimport numpy as np

代替:from numpy import empty, full, zeros, matrix, arange, asarray, array

如果不适合您,并且不清楚之前的内容,help(array)repr(array)type(array)将会很方便。 (如评论中所述)