相关疑难解决方法(0)

numpy:"array_like"对象的正式定义?

在numpy中,许多对象的构造函数接受"array_like"作为第一个参数.是否有这样一个对象的定义,要么作为抽象元类,要么应该包含方法的文档?

python numpy

49
推荐指数
3
解决办法
2万
查看次数

术语:Python和Numpy - "iterable"与"array_like"

Python程序中的一个iterable和一个array_like对象有什么区别Numpy

双方iterablearray_like经常看到的Python文档和他们分享一些相似的性质.

我知道在这种情况下,array_like对象应该支持Numpy类型操作,如广播,但是Numpy数组区域也是可迭代的.说这array_like是一个扩展(或超集?)是正确的iterable吗?

python numpy

21
推荐指数
2
解决办法
4329
查看次数

什么是Python的序列协议?

Python使用魔术方法做了很多,其中大部分是一些协议的一部分.我熟悉"迭代器协议"和"数字协议",但最近偶然发现术语"序列协议".但即使经过一些研究,我也不确定"序列协议"是什么.

例如,C API函数PySequence_Check检查(根据文档)某个对象是否实现了"序列协议".该源代码表明这是一类,这不是一个字典,但实现__getitem__它的方法大致相同,在什么文件iter还指出:

[...]必须支持序列协议(__getitem__()整数参数从0开始的方法).[...]

但是开始的要求0不是"实施"的PySequence_Check.

然后还有的collections.abc.Sequence类型,它基本上是说实例必须实现__reversed__,__contains__,__iter____len__.

但是根据该定义,实现"序列协议"的类不一定是序列,例如序列具有长度的"数据模型"和抽象类garantuee.但是实现__getitem__(传递PySequence_Check)的类在使用时会抛出异常len(an_instance_of_that_class).

有人可以告诉我序列和序列协议之间的区别(如果除了阅读源代码之外还有协议的定义)以及何时使用哪个定义?

python cpython sequence python-internals

16
推荐指数
1
解决办法
1620
查看次数

标签 统计

python ×3

numpy ×2

cpython ×1

python-internals ×1

sequence ×1