gpt4 book ai didi

python - 为什么 numpy.r_ 使用方括号而不是圆括号?

转载 作者:太空狗 更新时间:2023-10-29 17:06:20 27 4
gpt4 key购买 nike

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

例如,正确的语法是:

    np.r_['0,2', [1,2,3], [4,5,6]]

我本以为会是:

    np.r_('0,2', [1,2,3], [4,5,6])

最佳答案

任何 Python 类都可以使其实例接受其中一种或两种表示法:它将通过实现一个名为 __call__ 的函数来接受括号,通过实现 __getitem__ 来接受方括号。

np.r_ 恰好属于一个实现了 __getitem__ 的类,可以做比平常更奇特的事情。也就是说,r_ 的类(称为 np.lib.index_tricks.RClass)执行如下操作:

class RClass:
def __getitem__(self, item):
# r_ fancyness

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

l[:5]

,Python自动创建一个slice对象传递给__getitem__

此语法__call__ 一起使用 - 用户必须显式创建切片,方法是l(slice(5)).

请注意,__call__ 可以采用您喜欢的任何参数;而 __getitem__ 总是只接受一个参数:当您执行类似 my_array[1:3, 2:5] 的操作时,Python 会传入一个元组 切片。但是,正如您在 r_ 中看到的那样,内容不限于数字和切片 - 与任何其他函数类似,Python 会愉快地传入任何对象并将其留给类来计算它的内容意味着。

关于python - 为什么 numpy.r_ 使用方括号而不是圆括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755482/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com