为什么numpy.r_使用括号而不是括号?

kda*_*ica 16 python numpy

Numpy.r _,.c_和.s_是我遇到的唯一一个在方括号而不是括号中使用参数的Python函数.为什么会这样?这些功能有什么特别之处吗?我可以创建自己的使用括号的功能(不是我想要的;只是好奇)?

例如,正确的语法是:

    np.r_['0,2', [1,2,3], [4,5,6]]
Run Code Online (Sandbox Code Playgroud)

我原以为是:

    np.r_('0,2', [1,2,3], [4,5,6])
Run Code Online (Sandbox Code Playgroud)

lvc*_*lvc 17

可以创建任何Python类,以便其实例接受其中一种或两种符号:它将通过实现一个被调用的函数来接受parens __call__,并通过实现来接受括号__getitem__.

np.r_恰好是一个实现__getitem__比平时更高级的东西的类.也就是说,r_(调用np.lib.index_tricks.RClass)的类做这样的事情:

class RClass:
    def __getitem__(self, item):
        # r_ fancyness
Run Code Online (Sandbox Code Playgroud)

可能,这样做是为了它可以利用切片表示法 - 例如,当你有一个列表(或np数组或任何其他实现此协议的对象)时l,你会这样做:

l[:5]
Run Code Online (Sandbox Code Playgroud)

,Python自动创建一个slice要传递的对象__getitem__.

这句法工作,__call__-用户必须明确创建切片,通过做l(slice(5)).

请注意,__call__可以采取您喜欢的任何参数; 虽然__getitem__总是只有一个参数:当你做类似的事情时my_array[1:3, 2:5],Python传递一个切片的元组.但是,正如您所看到的r_,内容不仅限于数字和切片 - 与任何其他函数类似,Python将很乐意传入任何对象并将其留给类来解决它的含义.